我有一个简单的应用程序加载一个针对 iPhone 优化的网站UIWebView
。
问题是,缓存似乎不起作用:
[webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: url]
cachePolicy: NSURLRequestUseProtocolCachePolicy
timeoutInterval: 60.0]];
此远程页面中引用的任何内容(css、图像、外部 javascript 文件)永远不会被缓存(请求永远不会发送 If-Modified-Since 标头或任何其他缓存控制方式。)
可能吗?使用常规的 Cocoa WebView 似乎有一个委托方法,可以为每个资源请求和后加载(-didFinishLoadingFromDataSource:
)调用,您可以使用它们来滚动您自己的缓存..但这在这里似乎不适用。
我的整个页面(页面及其引用的资源)被压缩了大约 89K.. 在某些地方这比 3G 慢,甚至比 EDGE 更糟。传入的请求至少表明它接受压缩(accept-encoding=gzip, deflate
),所以我想这很好。
我读了这个 yui study,这似乎表明 iPhone 将缓存每个项目 25k。唯一引用超过 25k 未压缩的是 jquery(打包但未压缩 - 它是 30k)。其他一切都应该是可缓存的。对获取的页面中引用的任何内容的请求都不会在服务器端触发 304。
那个 yui 的研究是差不多一年前的事了,我猜只有移动 safari。
这是UIWebView
在原生 iPhone 应用程序中使用的。