Я поспілкувався з JMac у межах серії Laravel Creator Series про наш новий кейс: кешування Laravel News на рівні edge за допомогою його курсу Fast Laravel та сервісу Cloudflare. Ми розібрали цей проєкт як практичне дослідження і тепер, після запуску, готові поділитися досвідом та рішеннями проблем, з якими зіткнулися.
Laravel News — це високонавантажений сайт, контент якого постійно оновлюється: нові статті, посилання, спонсори та сповіщення. Багато хто вважає, що такі ресурси неможливо ефективно кешувати, але ми довели зворотне.
# Почніть із найпопулярніших сторінок
Jason використав системний підхід: проаналізував трафік, визначив сторінки з найбільшою кількістю запитів і закешував їх першими. Для нас це було п'ять ключових розділів:
- Головна сторінка
- Сторінка блогу
- Сторінки статей (самих постів)
- Сторінка community links
- Сторінка останніх посилань
# Три головні виклики
Сайт переважно статичний, проте має динамічні зони, що створило три основні проблеми.
Відмова від Livewire там, де він зайвий. Раніше майже весь сайт складався з Livewire-компонентів, хоча реактивність була потрібна лише формі підписки на розсилку. Ми повернулися до звичайних Blade-компонентів — це спростило структуру та дозволило чітко відокремити зони, що мають залишатися динамічними.
Збереження динамічних елементів. Певні частини сторінки не можна «заморозити»: сповіщення, форму розсилки та блоки партнерів, що змінюються при кожному запиті. Оскільки ми вже використовували Alpine для Livewire, ми додали Alpine AJAX, щоб підвантажувати ці компоненти відразу після завантаження сторінки.
Конфлікт рівнів кешування. Laravel News працює на Laravel Cloud, який має вбудоване edge-кешування на базі Cloudflare. Оскільки ми підключили Cloudflare напряму, ці два рівні почали конфліктувати. Зрештою ми вирішили обійти правила Laravel Cloud і працювати з Cloudflare безпосередньо — це дало той самий результат, але без плутанини в налаштуваннях.
# Очищення кешу при оновленні контенту
Ми скидаємо кеш під час деплою, але головне завдання — очищувати його в момент публікації статті або схвалення посилань. Це працює через події моделей Laravel: при оновленні статті ми слухаємо подію updated і очищуємо кеш конкретного матеріалу, а також головної сторінки та блогу.
Складніше було зі запланованими статтями, оскільки в момент їхнього виходу подія не спрацьовує. Ми вирішили це за допомогою консольної команди для соцмереж, яка тепер також очищує кеш основних сторінок. У гіршому випадку сторінка залишається «застарілою» не довше п'яти хвилин.
# Це працює на будь-якій платформі
Jason підкреслює: це рішення не прив’язане до Laravel Cloud. Edge-кешування працює на будь-якому сервері, якщо перед ним стоїть Cloudflare. Наприклад, його проєкт Laravel Shift працює на DigitalOcean за $5 на місяць, обробляє 50 000 запитів на день завдяки кешуванню та забезпечує відгук у 20 мілісекунд.
Наразі винятком є лише Livewire через його залежність від сесій. Проте Jason уже обговорює з Caleb Porzio можливість створення анонімних компонентів, що «оживатимуть» після завантаження. З Inertia, React та API-запитами жодних проблем немає.
Результати Laravel News миттєві: показник кешування запитів зріс до 70%, а сайт став відчутно швидшим. Наступний крок — перевірити, чи дозволить зниження навантаження на сервер перейти на дешевший тарифний план без шкоди для продуктивності.
# Дізнайтеся більше
Подивіться повне відео бесіди та зверніть увагу на курс Fast Laravel. Як зазначив Jason, edge-кешування — це ефективна практика, яку варто впроваджувати у кожен сучасний проєкт.