$[timeformat('2021-10-08T10:46:28+08:00')]

iOS WKWebView的基本使用 WKWebView完美网络请求拦截 WKWebview使用二三事 史上最全的WKWebView问题优化指南 美团 WebView性能、体验分析与优化 WKWebView 的性能优化 WKWebview的坑和优化 移动 H5 首屏秒开优化方案探讨

WKWebView 加载流程

要想优化Web就需要了解其加载流程,并针对每个流程进行优化:

  1. 初始化 webview
  2. 请求页面 、下载数据
  3. 解析HTML
  4. 请求 js/css 资源
  5. dom 渲染
  6. 解析执行 JS 脚本
  7. JS 请求数据
  8. 解析渲染
  9. 下载渲染图片等资源

初始化 webview

APP启动后,UIWebView 和 WKWebView的浏览器内核并不会自动初始化,而是当你首次调用WKWebView/UIWebView 相关页面或者功能时才进行 类似于懒加载的初始化过程。这个过程只能Native来优化。

市面上表较多的两种优化方案如下:

方案一 预初始化 WKWebView/UIWebView

APP启动后 预先初始化一个暂时用不到的WebView,牺牲性能 换取首次加载WebView时间。 这里需要注意的是,一个成熟的APP 在启动时都会进行各种初始化和预配置操作,所以 webview的预初始化需要根据业务,找一个合适的时机。

方案二 客户端代理数据请求

自定义 NSURLProtocol子类,拦截webview内的网络请求,让Native 开启子线程去代理这个过程。因为webview内的网络操作是一个单线程操作。这样就能节省一部分时间了。