У меня есть простое приложение, загружающее сайт, оптимизированный для 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 будет кэшировать 25k за элемент. Единственное, на что ссылается, что более 25k несжатых - jquery (упакованный, но несжатый - это 30k). Все остальное должно быть кэшируемым. Никакой запрос на что-либо, ссылающийся на выбранную страницу, не запускает 304 на стороне сервера.
Это исследование yui было проведено почти год назад, и я угадываю только мобильное сафари.
В приложении для родного iPhone используется UIWebView
.