簡體   English   中英

如何在UIWebView中緩存內容以便以后更快地加載?

[英]How to cache content in UIWebView for faster loading later on?

我注意到iphone safari會緩存內容,以便以后加載頁面的速度比桌面瀏覽器快得多。 所以以移動gmail網頁為例,第一次加載很慢(5-10秒)。 但如果我關閉標簽並再次重新打開頁面,則會非常快(1秒)。

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

關鍵是: 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];
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內容中沒有更新,它將從緩存(本地存儲)加載。

基於此討論線程 ,似乎UIWebView不存在任何操作系統級別的緩存。 根據經驗,我注意到我的iPhone OS設備上的Safari沒有緩存其網頁(例如,在Safari中點擊后退按鈕不會從緩存中重新加載舊頁面)。

我已經完成了幾個將頁面緩存到Documents文件夾的應用程序,然后在加載新網頁之前比較緩存和網頁的時間戳。 所以基本流程是:

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

stuffFileIntoUIView

maybeReduceCache

您仍然需要訪問Web以獲取標題,但這通常比下載整個頁面/圖像/文件快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM