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

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

关于保存在沙盒中的缓存文件如下图:

iOS,webview加载缓存,wkwebview,加载缓存,webview加载时序

iOS,webview加载缓存,wkwebview,加载缓存,webview加载时序

5.针对UIWebView出现的内存泄漏方法(网上)


  - (void)webViewDidFinishLoad:(UIWebView *)webView
  {
    //防止内存泄漏
    [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
    //本地webkit硬盘图片的缓存;
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];//自己添加的,原文没有提到。
    //静止webkit离线缓存
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"];//自己添加的,,原文没有提到。
    [[NSUserDefaults standardUserDefaults] synchronize];
  }

  - (void)dealloc
  {
    [webView loadHTMLString:@"" baseURL:nil];
    [webView stopLoading];
    [webView removeFromSuperview];
    webView = nil;
    [[NSURLCache sharedURLCache] removeAllCachedResponses]; 
    [[NSURLCache sharedURLCache] setDiskCapacity:0]; 
    [[NSURLCache sharedURLCache] setMemoryCapacity:0]; 
    NSLog(@"释放了webview");
  }


  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
     int cacheSizeMemory = 4*1024*1024; // 4MB int      

     cacheSizeDisk = 32*1024*1024; // 32MB 
     NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
     [NSURLCache setSharedURLCache:sharedCache]; 
  } 
  - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 
     [[NSURLCache sharedURLCache] removeAllCachedResponses];
  }

PS:经测试好像没什么卵用,先放在这里反正写了也没什么坏处

确定

1.如果没有CDN缓存影响;每次杀死APP后重新进入,第一次加载webview,都会加载全部的数据资源(外联js,外联css,图片等)退出去后,如果在没有更新js,css内容时,默认只会加载html内容,PS:html中的内容 在每次加载webView中都会从服务器中更新一下;

2.如果js css后面都添加了版本号,那么在每次更新版本号时,或者说资源链接变化时,webView一定会重新加载新的内容;如下图


<script type="text/javascript" src="index1.js?v=1.0.0"></script>

疑问?

1.经测试发现,JS CSS没有加版本号,更新JS CSS的内容有时候也会及时从服务器中更新获取,大多数时候又不会更新;不知道是不是跟web服务器的缓存策略有关,还是文件超期了?还是CDN缓存有关?