Ограничение кешируемого объекта WKWebView составляет 10 МБ, оно хранится в разархивированном виде в кэше.
Кажется невозможным законно увеличить этот предел (<= iOS13 во время записи). </p>
Можно перехватывать запросы с помощью WKWebKit и напрямую использовать URLSession / URLCache. Следует отметить, что URLCache будет хранить ответ только в том случае, если размер ответа <~ 5% от размера кэша - и я думаю, что это та же самая причина, по которой WKWebView не кэширует ответы> = 10 МБ напрямую. Итак, в моем случае мне пришлось создать URLCache ~ 600 МБ, чтобы приспособиться к этому. Я пытался сохранить ответ вручную с помощью storeCachedResponse (_: for :), но, похоже, получал повреждения при его получении - не задумывался, почему наличие 600 МБ кеша почти приемлемо для моего варианта использования.
Состояния документации AppleURLCache будет кэшироваться только в том случае, если:
- Запрос относится к URL-адресу HTTP или HTTPS (или к вашему собственному сетевому протоколу, который поддерживает кэширование).
- Запрос выполнен успешно (со статусомкод в диапазоне 200–299).
- Предоставленный ответ пришел с сервера, а не из кэша.
- Политика кэширования конфигурации сеанса допускает кэширование.
- Предоставленная политика кэширования объекта URLRequest (если применимо) разрешает кэширование.
- Заголовки, связанные с кэшем в ответе сервера (если есть), разрешают кэширование.
- Размер ответа достаточно мал, чтобы разумно соответствоватьв кеше. (Например, если вы предоставляете кеш диска, ответ должен быть не больше примерно 5% от размера кеша диска.)
source
edit в дополнение к этому я обнаружил, что просто увеличение размера URLCache ненадежно, и довольно часто возникали ошибки в кеше, даже если Etag не изменился. Вместо этого я создал отдельный небольшой URLCache (чуть более чем вдвое больше данных, которые мне нужно хранить). Установите политику кэширования на .reloadIgnoringLocalCacheData
и сохраняйте / извлекайте кэшированные данные вручную.