Comments 8
Звучит подозрительно сложно. А нельзя сказать в ответе на запрос к анимации, чтобы браузер просто закэшировал этот ресурс стандартным образом? Картинки же сайты как-то кэшируют, что мешает проворачивать ровно то же самое с Lottie? И перед запросом самой картинки какой-нибудь OPTION слать для инвалидации кэша.
Здравствуйте! Да, действительно, в большинстве случаев можно было бы использовать дефолтное браузерное кеширование, но в нашем случае необходимо было поддерживать актуальность анимаций у всех пользователей в один момент времени (не считая офлайн), а также точечно их обновлять в случае, если они изменились.
Не очень понятно что подразумевается под "поддерживать актуальность анимаций". У вас там стриминг анимаций происходит? Дык Lottie вроде так и не умеет. Ну а для гарантированного обновления собственно есть тот же Option и возможность слать ответ 304 Not Modified. Настраиваете Cache-Control в заголовках и погнал.
If-Not-Modified-Since + Last-Modified или If-None-Matches + Etag. Почему ваш сервер не обрабатывает/отдаёт эти заголовки на статику (это поведение по умолчанию любого нормального веб-сервера и даже модуля отдачи статики dev-сервера)?
Почему ваш бандлер не добавляет хеши ко всем ресурсам проекта, чтобы при любом изменении получалось уникальное имя (и тогда не важно сколько браузер будет кешировать старую версию)?
Тут определённо что-то не так!
"Почему ваш бандлер не добавляет хеши ко всем ресурсам проекта, чтобы при любом изменении получалось уникальное имя (и тогда не важно сколько браузер будет кешировать старую версию)? "
Здравствуйте!
Бандлер добавляет хеш к каждому ресурсу (css, html, js), но в данном случае анимации хранятся в бд, анимации не являются ресурсами проекта
"If-Not-Modified-Since + Last-Modified или If-None-Matches + Etag. Почему ваш сервер не обрабатывает/отдаёт эти заголовки на статику (это поведение по умолчанию любого нормального веб-сервера и даже модуля отдачи статики dev-сервера) "
Этот подход не давал уверенности что браузер сбросит/обновит кеш у каждого пользователя в один момент времени (например, при апдейте одной анимации из пака)
Почему нельзя просто отдать Cache-Control со сроком годности в год? Чтобы обновлять анимации настроить бандлер добавлять хеши к именам файлов, тогда новая версия новое имя файла, обход кеша. Обычно это поведение по умолчанию, просто надо не класть анимации в public каталог, а импортировать в JS их пути/содержимое (бандлеры отлично умеют импорт JSON, в том числе асинхронный), чтобы они прошли бандлер.
Либо честная обработка If-Not-Modified-Since заголовка сервером + отдача Last-Modified заголовка. Либо Etag + If-None-Matches по вкусу. Опять же, большинство веб-серверов делают это по умолчанию при отдаче статики. Если не делают, надо чинить, там обычно вопрос одной опции, причём часто идущей по умолчанию.
В браузерах, http протоколе и веб серверах есть всё необходимое для кеширования, если это специально не ломать кривыми настройками.
А Service Worker тут стрельба из пушки по воробям, он нужен для разработки приложений, которые вообще без интернета работают.
Статья из разряда "как не надо делать".
Кеширование Lottie-анимаций с помощью Service Worker