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

