У меня есть простое приложение, загружающее сайт, оптимизированный для iPhone, в UIWebView
.
Проблема в том, что кэширование не работает:
[webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: url]
cachePolicy: NSURLRequestUseProtocolCachePolicy
timeoutInterval: 60.0]];
Все объекты, на которые есть ссылки на этой удаленной странице (CSS, изображения, внешние файлы javascript), никогда не кэшируются (запросы никогда не отправляют заголовок If-Modified-Since или что-либо еще в плане управления кэшем.)
Возможно ли это? Кажется, в обычном Cocoa WebView есть методы делегатов, которые вызываются для каждого запроса ресурса и последующей загрузки (-didFinishLoadingFromDataSource:
), которые вы можете использовать для прокрутки собственного кэширования ... но здесь это не применимо.
Вся моя страница (страница и ссылочные ресурсы) сжата примерно на 89 тыс., Что в некоторых местах медленнее, чем 3G, и даже хуже, чем EDGE. Входящие запросы по крайней мере указывают на то, что он принимает сжатие (accept-encoding=gzip, deflate
), так что это хорошо, я полагаю.
Я прочитал это исследование yui , которое, кажется, указывает на то, что iPhone будет кэшировать 25 КБ на элемент. Единственное упоминание о том, что более 25 тыс. Несжатых файлов - это jquery (упакованный, но несжатый - 30 тыс.). Все остальное должно быть кешируемым. Ни один запрос на что-либо, на что есть ссылка в извлеченной странице, не вызывает 304 на стороне сервера.
Это исследование было почти год назад, и я думаю, только с мобильным сафари.
Используется UIWebView
в родном приложении для iPhone.