All streams
Search
Write a publication
Pull to refresh

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-сервера) "

Этот подход не давал уверенности что браузер сбросит/обновит кеш у каждого пользователя в один момент времени (например, при апдейте одной анимации из пака)

Спасибо за ответ

Были на практике случаи, когда браузер не слал If-Not-Modified-Since/If-None-Matches при наличии ресурса в кеше (причём кеш по etag даже не чувствителен к сбитым часам клиента, так как всё идёт по хешу, а не дате изменения)? Интересно

Почему нельзя просто отдать Cache-Control со сроком годности в год? Чтобы обновлять анимации настроить бандлер добавлять хеши к именам файлов, тогда новая версия новое имя файла, обход кеша. Обычно это поведение по умолчанию, просто надо не класть анимации в public каталог, а импортировать в JS их пути/содержимое (бандлеры отлично умеют импорт JSON, в том числе асинхронный), чтобы они прошли бандлер.

Либо честная обработка If-Not-Modified-Since заголовка сервером + отдача Last-Modified заголовка. Либо Etag + If-None-Matches по вкусу. Опять же, большинство веб-серверов делают это по умолчанию при отдаче статики. Если не делают, надо чинить, там обычно вопрос одной опции, причём часто идущей по умолчанию.

В браузерах, http протоколе и веб серверах есть всё необходимое для кеширования, если это специально не ломать кривыми настройками.

А Service Worker тут стрельба из пушки по воробям, он нужен для разработки приложений, которые вообще без интернета работают.

Статья из разряда "как не надо делать".

К get-запросу на получение скрипта можно было бы просто добавить "?<lottie_file_version>".

А так, работа с кешем на таком уровне - это больше про офлайн pwa.

Sign up to leave a comment.

Articles