如何在UIWebView中caching内容以便稍后加载?
我注意到,iPhone Safaricaching的内容,以便您的网页加载以后更快得多像一个桌面浏览器。 所以以移动gmail网页为例,第一次加载是很慢的(5-10秒)。 但是如果我closures标签并重新打开页面,这是非常快(1秒)。
但是,如果在应用程序中通过UIWebView加载内容,则此行为不一样。 我是否缺less一些设置? 如何让UIWebView自动caching内容,而不必经历自己保存内容的麻烦?
关键是: 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内容没有更新,它将从caching(本地存储)加载。
基于这个讨论线程 ,它将显示没有任何操作系统级的caching可能与UIWebView
。 根据经验,我注意到我的iPhone OS设备上的Safari不caching它的网页(例如,在Safari中点击后退button不会从caching重新加载旧页面)。
我已经做了几个应用程序,将页面caching到Documents文件夹中,然后在加载新的网页之前比较caching和网页的时间戳。 所以基本stream程是:
if (fileIsInCache) if (cacheFileDate > webFileDate) getCachedFile else getFileFromWeb saveFileToCache else getFileFromWeb saveFileToCache stuffFileIntoUIView maybeReduceCache
你仍然需要打网页来获取标题,但是通常比下载整个页面/图像/文件要快得多。