Как предоставить вашим клиентам самые свежие и лучшие

Яркая сторона кеширования

Кэширование отлично подходит для частой выборки больших ресурсов: библиотек, изображений или других ресурсов. Механизм довольно прост для объяснения и понимания: ресурсы имеют уникальный URL-адрес, и на основе этого браузер сохраняет на устройстве пользователя загруженный ресурс для последующего повторного использования.

Браузеры также могут получать от серверов инструкции о том, как долго нужно кэшировать контент. В случае больших библиотек (таких как main.dart.js, текущий вывод Flutter для веб-платформы) мы хотели бы, чтобы они кешировались навсегда, если ничего не изменится.

Например, мой main.dart.js в настоящее время имеет размер ~ 2 МБ. Получение чего-то такого большого по сети является как медленным (требуется много обращений к серверу, так и клиент-серверным, что требует времени, а начальное время загрузки - это то, что делает или ломает приложение - веб или мобильное приложение), но и дорого (во-первых, учтите затраты на передачу данных, понесенные пользователем. , затем для себя, обслуживающего этот контент).

Таким образом, наличие этого механизма экономит время и деньги. Здорово, правда?

Есть и некрасивая сторона

После кэширования ресурсов пользователи будут видеть и использовать эти версии до тех пор, пока кеш не будет очищен. Такое случается нечасто, особенно если сервер дал браузеру указание не делать этого.

Обычно, чтобы преодолеть это, пользователи должны войти в настройки своего браузера, пройти через некоторые замысловатые меню, найти нужное место, где есть возможность очистить его кеш, а затем перезагрузить веб-сайт, чтобы получить новую версию ресурсов.

Что ж, удачи в объяснении вашим клиентам, как очистить кеш браузера (если вам повезло, что вы можете связаться с ними)!

Действия, которые они должны предпринять, зависят от их устройства, операционной системы и предпочитаемого браузера (и его версии). Например, один и тот же браузер в Windows имеет другое расположение для MacOS, не говоря уже о мобильных устройствах.

Контекст

Недавно я наткнулся на «уродливую сторону» Flutter для Интернета, сторону, с которой скоро столкнутся еще больше разработчиков.

Я создаю веб-приложение с использованием Flutter и постоянно дорабатываю его. У меня есть группа тестировщиков, которые пробуют работать с приложением, и они сообщают об ошибках, запрашивают функции и предоставляют общие отзывы.

Иногда я получал отчеты об ошибках, которые я уже исправил, и быстро понял, что тестировщики использовали кешированные версии приложения.

Решение?

Довольно просто!

После создания проекта ваш index.html, расположенный в веб-папке ,, будет выглядеть следующим образом:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>to_cache_or_not_to_cache</title>
  </head>
  <body>
    <script src="main.dart.js" type="application/javascript"></script>
  </body>
</html>

Чтобы заставить браузеры перезагружать наше приложение, мы каждый раз, когда захотим, будем добавлять уникальный параметр в сценарий main.dart.js src (я назвал его версия, хотя это может быть что угодно, даже случайное число после ?). Новый index.html будет выглядеть так:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>to_cache_or_not_to_cache</title>
  </head>
  <body>
    <script src="main.dart.js?version=1" type="application/javascript"></script>
  </body>
</html>

Нет, нет, уродливой стороны

Это гарантирует перезагрузку вашего приложения и по-прежнему будет кэшировать его для будущих перезагрузок, пока вы не решите сделать новое обновление. Затем вы просто увеличиваете номер своей версии.

Тем не менее, у этого подхода есть небольшой недостаток: предыдущие версии некоторое время остаются в кеше в браузере пользователя. Если это то, с чем ты можешь жить, прекрасно. В противном случае существует надежное решение, которое может избежать этого недостатка, хотя для этого вам придется выполнить кодирование на стороне сервера.

Подробнее о кешировании можно узнать здесь.

Это все!