Публікація

Service Worker для агресивного кешування даних сайта

Мої думки щодо що краще зберігати в кеш

Service Worker (далі SW) дозволяє перехоплювати трафік між браузером та сервером та вибірково кешувати відповіді від сервера. Я не хочу переказувати те як він працює, тому що поки що володію темою не настільки глибоко як хотілося б, тому просто опишу думки з приводу SW.

Мій досвід використання SW зводиться до налаштування sw-toolbox від гугла, що є надстройкою над SW для спрощення опису правил кешування.

Проте я зміг оцінити силу SW, коли більша частина контенту сайта зберігається на машині користувача і агресивно кешується, тобто настільки агресивно що при відключенні інтернета сайт продовжує бути функціональним. Завдяки SW і роблять Offline версії сайтів.

Я по нерозумінню увімкнув агресивне кешування всіх зображень, навіть тих що зберігаються в S3 і є user-generated контентом. Ефект був двояким. З одного боку було прикольно, що сайт включно з контентом можно було читати офлайн, проте розмір кеша настільки був великим, що досягав 1 гігабайта. Деякі користувачі помітили це і були не дуже задоволеними. Я перевірив який максимальний розмір кеша дозволяють тримати сучасні браузери і виявилося, що Chrome може займати до 80% диску девайса, ліміт Safari сягає приблизно 1 гігабайт, ліміт Firefox – 50% диска. Тож мені видається, що гарантовано можно отримати для сайту десь від 200 мегобайт до 1 гігабайту диска користувача.

Що можно кешувати? Давай подумаємо з чого складається сайт, спрощено:

  • HTML
  • CSS
  • JS
  • API дані
  • Зображення, відео, аудіо

HTML, CSS, JS безперечно перші кандидати, котрих треба класти в кеш. API дані складніше, треба аналізувати кожен ендпоінт та зрозуміти з якою частотою оновлюються дані в цьому ендпоінті. Проблеми можуть виникнути з контентом, який редагується або видаляється. З даними користувача більш-менш зрозуміло. Якщо ми маємо REST-ендпоінти ресурсів, то запити POST, PUT, PATCH, DELETE до ресурсу якось змінюють його, тому можно одразу видалити цей ресурс з кешу щоб браузер міг підтянути нову версію. Складніше з ресурсами, котрі знаходяться у спільному користуванні. Мабуть, найкращим варіантом (з моєї точки зору) для таких ресурсів буде кешування на невеликий проміжок часу, наприклад 1 хвилина.

Зображення, відео, аудіо, особливо якщо це контент генеруємий користувачами, не треба включати в кеш. І зробити для таких ресурсів спеціальне відображення. На стороні HTML/JS відслідковувати подію error та показувати Не вдалося завантажити зображення або відео. Повторити?.

На цьому це всі думки щодо SW. Для мене це потужний інструмент, щоб знизити кількість запитів на сервер, що дасть можливість залучати більше користувачів. Я хочу спробувати розібратися в цьому інструменті глибше в поєднанні з темою рейт лімітів, які виставляються на стороні сервера.

Публікація захищена ліцензією CC BY 4.0 .

© jmas. Деякі права захищено.

Powered by Jekyll with Chirpy theme