2009-08-28 83 views
20

我注意到,iphone Safari會緩存內容,以便稍後加載頁面的速度要快得多,就像桌面瀏覽器一樣。因此,以移動gmail網頁爲例,第一次加載非常慢(5-10秒)。但是,如果我關閉該選項卡並重新打開該頁面,則非常快(1秒)。如何在UIWebView中緩存內容以便稍後加載?

但是,如果您通過應用程序中的UIWebView加載內容,則此行爲不一樣。我錯過了一些設置?如何讓UIWebView自動緩存內容,而無需親自保存內容?

回答

1

基於this discussion thread它似乎沒有任何操作系統級別的緩存可能與UIWebView。根據經驗,我注意到我iPhone操作系統設備上的Safari不會緩存其網頁(例如,在Safari中點擊後退按鈕不會從緩存重新加載舊頁面)。

+0

似乎緩存僅適用於脫機時使用的HTML 5清單。 – jianhua 2012-09-26 03:25:12

21

的關鍵是: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]; 
+9

iOS文檔指出NSURLRequestReturnCacheDataElseLoad「指定應使用現有緩存數據來滿足請求,而不管其年齡或過期日期。」這通常不是你想要的,因爲它忽略了像max-age等緩存策略頭。所以這聽起來不是一個好的一般答案。看似最好的選擇是「NSURLRequestUseProtocolCachePolicy」,但這似乎什麼都不做。 – Yetanotherjosh 2011-04-19 02:07:54

-1

我已經做了幾個應用程序的高速緩存頁面,文檔文件夾,然後加載新的網頁之前比較緩存&網頁的時間戳。因此,基本流程如下:

if (fileIsInCache) 
    if (cacheFileDate > webFileDate) 
     getCachedFile 
    else 
     getFileFromWeb 
     saveFileToCache 
else 
    getFileFromWeb 
    saveFileToCache 

stuffFileIntoUIView 

maybeReduceCache 

您仍然必須點擊網頁才能獲取標題,但這通常比下載整個頁面/圖像/文件快得多。

+6

你有這樣的一些示例代碼嗎? – Tudorizer 2010-10-23 18:47:57

2
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內容沒有更新它會從緩存(本地存儲)加載。

+0

你能解釋一下嗎? – Miki 2014-10-03 07:07:17

+0

它會首次加載一個url,然後只查找內容的變化..,如果URL內容沒有更新,它將從緩存(本地存儲)加載。 – 2014-10-06 04:45:33

+0

是的,但在答案中做到這一點 – Miki 2014-10-06 04:49:22

相關問題