WKWebView优化

尽管WKWebView比UIWebView加载速度更快, 内存也只有其1/3~1/4, 但相对Native, 还是很慢的

从开启到显示内容, 耗时可以划分几个阶段, 创建Controller 和WKWebView -> 请求url获得网络数据 -> 加载并渲染 -> 内部分步请求...

优化创建时间

创建Controllerhe WKWebView,并显示需要大约90ms, 在Application中提前创建好, 等到需要使用的时候直接push/present会节省创建时间

private lazy var web: WebViewController = {
    return WebViewController()
}()

init() {
    _ = self.web
}

func generateWebViewController() -> WebViewController {
    DispatchQueue.main.async {
        self.web = WebViewController()
    }
    return self.web
}

优化请求时间

等到Web初始化好后再直接设置web.url = URL(string: "xxxx"), 中间的请求时间会是白的. 由于请求是异步的, 所以可以先请求, 然后等web显示可以节省掉显示Controller的时间

func generateWebController(url: string) -> WebViewController {
     let web = self.generateWebController()
     if let url = URL(string: url), let request = URLRequest(url: url) {
         // config request
         let task = URLSession.shared.dataTask(with: request) { [weak web] (data, response, error) in
             if let data = data, let html = String(data: data, encoding: NSUTF8StringEncoding) {
                 DispatchQueue.main.async { web?.loadHTMLString(html, baseURL: nil) }
             }
         }
         task.resume()
     }
     return web
}

results matching ""

    No results matching ""