我注意到,iphone Safari會緩存內容,以便稍後加載頁面的速度要快得多,就像桌面瀏覽器一樣。因此,以移動gmail網頁爲例,第一次加載非常慢(5-10秒)。但是,如果我關閉該選項卡並重新打開該頁面,則非常快(1秒)。如何在UIWebView中緩存內容以便稍後加載?
但是,如果您通過應用程序中的UIWebView加載內容,則此行爲不一樣。我錯過了一些設置?如何讓UIWebView自動緩存內容,而無需親自保存內容?
我注意到,iphone Safari會緩存內容,以便稍後加載頁面的速度要快得多,就像桌面瀏覽器一樣。因此,以移動gmail網頁爲例,第一次加載非常慢(5-10秒)。但是,如果我關閉該選項卡並重新打開該頁面,則非常快(1秒)。如何在UIWebView中緩存內容以便稍後加載?
但是,如果您通過應用程序中的UIWebView加載內容,則此行爲不一樣。我錯過了一些設置?如何讓UIWebView自動緩存內容,而無需親自保存內容?
基於this discussion thread它似乎沒有任何操作系統級別的緩存可能與UIWebView
。根據經驗,我注意到我iPhone操作系統設備上的Safari不會緩存其網頁(例如,在Safari中點擊後退按鈕不會從緩存重新加載舊頁面)。
的關鍵是:NSURLRequestReturnCacheDataElseLoad
NSData *urlData;
NSString *baseURLString = @"mysite.com";
NSString *urlString = [baseURLString stringByAppendingPathComponent:@"myfile"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 10.0];
NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:nil];
if (connection)
{
urlData = [NSURLConnection sendSynchronousRequest: request];
NSString *htmlString = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
[webView loadHTMLString:htmlString baseURL:baseURLString];
[htmlString release];
}
[connection release];
iOS文檔指出NSURLRequestReturnCacheDataElseLoad「指定應使用現有緩存數據來滿足請求,而不管其年齡或過期日期。」這通常不是你想要的,因爲它忽略了像max-age等緩存策略頭。所以這聽起來不是一個好的一般答案。看似最好的選擇是「NSURLRequestUseProtocolCachePolicy」,但這似乎什麼都不做。 – Yetanotherjosh 2011-04-19 02:07:54
我已經做了幾個應用程序的高速緩存頁面,文檔文件夾,然後加載新的網頁之前比較緩存&網頁的時間戳。因此,基本流程如下:
if (fileIsInCache)
if (cacheFileDate > webFileDate)
getCachedFile
else
getFileFromWeb
saveFileToCache
else
getFileFromWeb
saveFileToCache
stuffFileIntoUIView
maybeReduceCache
您仍然必須點擊網頁才能獲取標題,但這通常比下載整個頁面/圖像/文件快得多。
你有這樣的一些示例代碼嗎? – Tudorizer 2010-10-23 18:47:57
NSString *stringurl=[NSString stringWithFormat:@"http://www.google.com"];
NSURL *url=[NSURL URLWithString:stringurl];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:15.0];
[uiwebview loadRequest:theRequest];
它會加載一個url首次然後查找只爲內容的變化..,如果在URL內容沒有更新它會從緩存(本地存儲)加載。
似乎緩存僅適用於脫機時使用的HTML 5清單。 – jianhua 2012-09-26 03:25:12