详解iOS webview加载时序和缓存问题总结

2020-01-21 00:44:17王旭

iOS webView的加载时序

UIWebView加载顺序:


- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

  NSLog(@"开始请求webview:%@",request.URL.relativeString);
  return YES;

}
 - (void)webViewDidStartLoad:(UIWebView *)webView {
    NSLog(@"开始加载webview");  
}
- (void)webViewDidFinishLoad:(UIWebView *)webView { 
   NSLog(@"结束加载webview");  
}  
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nonnull NSError *)error {
    NSLog(@"webView加载失败");
 }

加载的结果:

2017-04-27 08:53:00.535 H5页面调试[1273:150877] 开始请求webview:http://www.easck.com/p>

-----------------显示开始加载html CSS js 和图片资源等(JS引擎单线程顺序执行)---------------

2017-04-27 08:53:01.069 H5页面调试[1273:150877] 结束加载webview

 WKWebView加载时序:


- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
  NSLog(@"webview开始请求");
  decisionHandler(WKNavigationActionPolicyAllow);
}
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
  NSLog(@"webView开始加载");
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
  NSLog(@"webview开始收到响应");
  decisionHandler(WKNavigationResponsePolicyAllow);
}

-----------------显示开始加载html CSS js 和图片资源等(JS引擎单线程顺序执行)---------------

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
  NSLog(@"1");
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
  NSLog(@"webview结束加载内容");
}
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{
  NSLog(@"webview加载失败");
}
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{
  NSLog(@"开始重定向的函数");
}
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
{
  NSLog(@"2");
  completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}

iOS webView加载html5缓存

1.加载html5的过程

每次加载一个HTML5页面,都会有较多的请求。除了HTML主URL自身的请求外,HTML外部引用的JS、CSS、字体文件、图片都是一个独立的HTTP请求,每一个请求都串行的(可能有连接复用)。