国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

淺談iOS UIWebView對H5的緩存功能

2020-07-26 02:33:19
字體:
來源:轉載
供稿:網友

這兩天在搞與H5交互的事,之前做的都是加載的靜態的web頁面,交互調試起來很快,這次搞的是js寫的前端頁面,跳轉什么的都是動態的,然后就不響應了,搞了半天原來是緩存的問題,這里簡單介紹一下,一般請求會使用下面的方法:

+ (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.

大概意思是使用的緩存策略是根據協議來的, 即 NSURLRequestUseProtocolCachePolicy. 超時時間默認是60s.也就是說類似如下的請求:

NSURLRequest *urlReq = [NSURLRequest requestWithURL:url                      cachePolicy:NSURLRequestUseProtocolCachePolicy                      timeoutInterval:60.f];

如果協議支持緩存的話, UIWebview 請求到的數據就是緩存數據.該緩存是需要 WEB 服務器支持的.看一下常用的方法

// 使用緩存數據, 如果有緩存的話// 使用這個方法, 改變 HTML 或者 JS 代碼// 頁面不會拉取最新數據, 還是使用之前請求到的數據.// 除非重新刷新NSURLRequest *urlReq = [NSURLRequest requestWithURL:url                      cachePolicy:NSURLRequestReturnCacheDataDontLoad                    timeoutInterval:10.f]; // 使用協議緩存, 需要 web 服務器支持.NSURLRequest *urlReq = [NSURLRequest requestWithURL:url                      cachePolicy:NSURLRequestUseProtocolCachePolicy                    timeoutInterval:60.f]; // 不使用緩存, 加載數據NSURLRequest *urlReq = [NSURLRequest requestWithURL:url                      cachePolicy:NSURLRequestReloadIgnoringCacheData                    timeoutInterval:20.0];

下面是清除緩存的方法

[[NSURLCache sharedURLCache] removeAllCachedResponses];[[NSURLCache sharedURLCache] setDiskCapacity:0];[[NSURLCache sharedURLCache] setMemoryCapacity:0];

上面清除緩存的時候我們也看到了UIWebview緩存主要是利用NSURLCache來實現內存緩存或者本地緩存。內存緩存的最大值是4M(410241024),本地緩存是20M。

NSURLCache *cache = [[NSURLCache alloc] initWithMemoryCapacity:4*1024 * 1024 diskCapacity:0 diskPath:nil];[NSURLCache setSharedURLCache:cache];

其中[NSURLCache setSharedURLCache:cache]是針對當前進程中的所有clients做的共享緩存。由于iOS中當前進程中只有一個app, 所以只要是當前app中UIWebview加載的H5頁面,都是共享這個緩存空間的。

在加入上述功能之后,利用charles抓包,發現第一次加載H5頁面時候,很多的css文件,在二次打開該頁面的時候,charles沒有抓到,這個也證明了,在將css等資源文件緩存之后,再次打開H5頁面之后,UIWebview直接從NSURLCache中獲取緩存的css等資源,不會再次發起請求。另外也可以在加載H5后,打印cache.currentMemoryUsage來查看對應的內存消耗情況,如果數字大于0,就說明緩存中已經存儲H5內容了。

以上是在內存中緩存H5頁面,這個策略有個問題,如果用戶將進程殺掉,再次打開H5的時候,需要重新緩存。還有另外一種緩存策略,在本地緩存H5內容,主要是利用在NSURLCache子類中重寫下面方法。

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卓资县| 株洲县| 万荣县| 阿巴嘎旗| 尼勒克县| 阿坝县| 万盛区| 曲阳县| 阳朔县| 曲沃县| 桂阳县| 綦江县| 定日县| 青海省| SHOW| 隆德县| 永德县| 广南县| 德化县| 额济纳旗| 息烽县| 乌兰察布市| 兴业县| 福清市| 左权县| 永城市| 满城县| 德化县| 浙江省| 洞口县| 神木县| 沁源县| 吉林市| 德州市| 从化市| 会昌县| 河源市| 东城区| 恭城| 原平市| 奎屯市|