Преодоление ограничения в 50 МБ на кеш PWA для iOS

Мы создаем прогрессивное веб-приложение для устройств iOS и знаем об ограничении кэш-памяти в 50 МБ, налагаемом веб-браузером Safari. Как мы можем справиться с этим ограничением, если мы знаем, что сервисному работнику нашего приложения может потребоваться кэшировать данные объемом более 50 МБ, если мы включаем все статические ресурсы, видео, изображения и т. д. Наше первое предпочтение — поддерживать работу приложения в автономном режиме даже после кэширования. заполнен, и если это невозможно, то, по крайней мере, предотвратите поломку приложения, если пользователь работает в автономном режиме.

Было бы хорошо, если бы вы дали общий ответ, который мы можем реализовать и в других PWA.


person user444002    schedule 30.04.2018    source источник
comment
Вы не должны этого делать. Ограничение существует по причине: экономить использование сотовых данных. 50 МБ — это много для веб-приложения; попробуйте оптимизировать файлы вашего веб-сайта, сжав JS и CSS, и используйте веб-оптимизированную версию изображений и видео.   -  person Raptor    schedule 30.04.2018
comment
Да, вы правы, но что, если сохранение данных в автономном режиме является функциональным требованием. Допустим, я создаю PWA-версию приложения YouTube, которое позволяет пользователю сохранять видео в автономном режиме для последующего просмотра.   -  person user444002    schedule 30.04.2018
comment
Вы когда-нибудь находили решение этой проблемы? Мне нужно гораздо больше 50 МБ для нашего автономного приложения, которое также кэширует видео/изображения, отлично работает на планшете Android, но нам нужно то же самое для Ipad... как решить эту проблему?   -  person webkit    schedule 21.05.2019
comment
Я думаю, что это один из способов, которым Apple/Google удерживают вас от того, что вы хотите делать с PWA. Вероятно, вам следует рассмотреть собственное приложение, обертывающее ваше веб-приложение и предоставляющее вам доступ к некоторому реальному хранилищу на устройстве.   -  person Martin Chaov    schedule 21.08.2019
comment
Я работаю над несколькими PWA, используя мультимедиа (видео, аудио, фотографии), и в некоторых случаях нам нужно кэшировать более 50 МБ. Таким образом, использование IDB вместо этого является правильной игрой. Вы должны думать о медиафайлах как о данных, а не как о страницах. Классифицируйте его так же, как JSON формирует API. Также не забудьте применить правила TTL/invalidation ко всему, что вы кешируете. Таким образом, вы контролируете аннулирование боли, а не операционную систему.   -  person Chris Love    schedule 28.10.2019


Ответы (2)


В наши дни вы можете хранить более 50 МБ в мобильном Safari с помощью IndexedDB: https://love2dev.com/blog/what-is-the-service-worker-cache-storage-limit/

Если размер свободного места на диске превышает 1 ГБ, ограничение по умолчанию составляет 500 МБ; в противном случае это половина свободного места на диске.

Убедитесь сами, используя этот инструмент: https://demo.agektmr.com/storage/

person Chris    schedule 28.10.2019
comment
Спасибо за ссылку на мою статью! Я собирался указать на использование IDB. - person Chris Love; 28.10.2019

Как минимум в iOS 13 и IndexedDB, и cacheStorage должны иметь единую квоту в 1 ГБ. См. следующее изменение WebKit: https://bugs.webkit.org/show_bug.cgi?id=198133#c15

person fen1ksss    schedule 17.02.2020