淺談iOS UIWebView對H5的緩存功能
這兩天在搞與H5交互的事,之前做的都是加載的靜態(tài)的web頁面,交互調(diào)試起來很快,這次搞的是js寫的前端頁面,跳轉(zhuǎn)什么的都是動態(tài)的,然后就不響應(yīng)了,搞了半天原來是緩存的問題,這里簡單介紹一下,一般請求會使用下面的方法:
+ (instancetype)requestWithURL:(NSURL *)URL;
該方法的描述如下:
Creates and returns a URL request for a specified URL with default cache policy and timeout value.
The default cache policy is NSURLRequestUseProtocolCachePolicy and the default timeout interval is 60 seconds.
大概意思是使用的緩存策略是根據(jù)協(xié)議來的, 即 NSURLRequestUseProtocolCachePolicy. 超時(shí)時(shí)間默認(rèn)是60s.也就是說類似如下的請求:
NSURLRequest *urlReq = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.f];
如果協(xié)議支持緩存的話, UIWebview 請求到的數(shù)據(jù)就是緩存數(shù)據(jù).該緩存是需要 WEB 服務(wù)器支持的.看一下常用的方法
// 使用緩存數(shù)據(jù), 如果有緩存的話
// 使用這個方法, 改變 HTML 或者 JS 代碼
// 頁面不會拉取最新數(shù)據(jù), 還是使用之前請求到的數(shù)據(jù).
// 除非重新刷新
NSURLRequest *urlReq = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReturnCacheDataDontLoad
timeoutInterval:10.f];
// 使用協(xié)議緩存, 需要 web 服務(wù)器支持.
NSURLRequest *urlReq = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.f];
// 不使用緩存, 加載數(shù)據(jù)
NSURLRequest *urlReq = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:20.0];
下面是清除緩存的方法
[[NSURLCache sharedURLCache] removeAllCachedResponses]; [[NSURLCache sharedURLCache] setDiskCapacity:0]; [[NSURLCache sharedURLCache] setMemoryCapacity:0];
上面清除緩存的時(shí)候我們也看到了UIWebview緩存主要是利用NSURLCache來實(shí)現(xiàn)內(nèi)存緩存或者本地緩存。內(nèi)存緩存的最大值是4M(410241024),本地緩存是20M。
NSURLCache *cache = [[NSURLCache alloc] initWithMemoryCapacity:4*1024 * 1024 diskCapacity:0 diskPath:nil]; [NSURLCache setSharedURLCache:cache];
其中[NSURLCache setSharedURLCache:cache]是針對當(dāng)前進(jìn)程中的所有clients做的共享緩存。由于iOS中當(dāng)前進(jìn)程中只有一個app, 所以只要是當(dāng)前app中UIWebview加載的H5頁面,都是共享這個緩存空間的。
在加入上述功能之后,利用charles抓包,發(fā)現(xiàn)第一次加載H5頁面時(shí)候,很多的css文件,在二次打開該頁面的時(shí)候,charles沒有抓到,這個也證明了,在將css等資源文件緩存之后,再次打開H5頁面之后,UIWebview直接從NSURLCache中獲取緩存的css等資源,不會再次發(fā)起請求。另外也可以在加載H5后,打印cache.currentMemoryUsage來查看對應(yīng)的內(nèi)存消耗情況,如果數(shù)字大于0,就說明緩存中已經(jīng)存儲H5內(nèi)容了。
以上是在內(nèi)存中緩存H5頁面,這個策略有個問題,如果用戶將進(jìn)程殺掉,再次打開H5的時(shí)候,需要重新緩存。還有另外一種緩存策略,在本地緩存H5內(nèi)容,主要是利用在NSURLCache子類中重寫下面方法。
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IOS中實(shí)現(xiàn)圖片點(diǎn)擊全屏預(yù)覽
IOS作為一款智能手機(jī)系統(tǒng),在查看圖片的時(shí)候,如果能夠?qū)崿F(xiàn)全屏,對用戶來說有很好的視覺體驗(yàn),其實(shí)實(shí)現(xiàn)起來非常的簡單,下面我就結(jié)合一個簡單的代碼給大家來分享一下,,需要的朋友可以參考下2015-11-11
IOS網(wǎng)絡(luò)請求之AFNetWorking 3.x 使用詳情
本篇文章主要介紹了IOS網(wǎng)絡(luò)請求之AFNetWorking 3.x 使用詳情,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
深入理解Objective-C中類的數(shù)據(jù)結(jié)構(gòu)
最近發(fā)現(xiàn)用Objective-C確實(shí)好容易,下面這篇文章主要給大家介紹了關(guān)于Objective-C中類的數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
iOS實(shí)現(xiàn)自定義購物車角標(biāo)顯示購物數(shù)量(添加商品時(shí)角標(biāo)抖動 Vie)
本文主要介紹了iOS實(shí)現(xiàn)自定義購物車及角標(biāo)顯示購物數(shù)量(添加商品時(shí)角標(biāo)抖動 Vie)的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
iOS應(yīng)用中存儲用戶設(shè)置的plist文件的創(chuàng)建與讀寫教程
這篇文章主要介紹了iOS應(yīng)用中存儲用戶設(shè)置的plist文件的創(chuàng)建與讀寫教程,plist文件是在Xcode下的項(xiàng)目中會被自動生成,里面采用XML格式記錄數(shù)據(jù),需要的朋友可以參考下2016-04-04
解決Flutter出現(xiàn)CocoaPods報(bào)錯情況(Mac和IOS)
這篇文章主要為大家介紹了解決Flutter出現(xiàn)CocoaPods報(bào)錯情況(Mac和IOS)的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

