如何在UIWebView中缓存内容以便以后更快地加载?

时间:2009-08-28 18:42:45

标签: iphone html objective-c ios

我注意到iphone safari会缓存内容,以便您以后的页面加载速度更快,就像桌面浏览器一样。所以以移动gmail网页为例,第一次加载很慢(5-10秒)。但如果我关闭标签并再次重新打开页面,它会非常快(1秒)。

但是,如果您通过应用中的UIWebView加载内容,则此行为不一样。我错过了一些设置吗?如何让UIWebView自动缓存内容,而不必自行解决保存内容的麻烦?

4 个答案:

答案 0 :(得分:23)

关键是: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];

答案 1 :(得分:4)

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内容中没有更新,它将从缓存(本地存储)加载。

答案 2 :(得分:2)

基于this discussion threadUIWebView可能无法进行任何操作系统级别的缓存。根据经验,我注意到我的iPhone OS设备上的Safari没有缓存其网页(例如,点击Safari中的后退按钮不会从缓存中重新加载旧页面。)

答案 3 :(得分:0)

我已经完成了几个将页面缓存到Documents文件夹的应用程序,然后比较缓存的文件夹的时间戳。加载新网页之前的网页。所以基本流程是:

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

stuffFileIntoUIView

maybeReduceCache

您仍然需要访问网络以获取标题,但这通常比下载整个页面/图像/文件快得多。