Використовуйте кеш - такий заклик ви побачите на більшості статей про оптимізацію швидкості сайту. Однак, щоб не стати жертвою оптимізацій, треба розуміти, що це за інструмент, які проблеми він вирішує і які наслідки має.
Існує багато видів кешу. В цій статті ми будемо говорити про кешування сторінок сайту на стороні серверу. Тож, для чого нам взагалі кешувати сторінки на сервері?
В чому сенс кешування сторінок сайту?
Коли браузер надсилає запит відкрити сторінку, сервер обробляє його: виконує програмний код, збирає інформацію з бази даних і формує HTML-документ. Це і є сторінка сайту. Доки браузер її не отримав, він нічого не може робити, бо не знає, що робити. Час, за який сервер обробляє ці процеси і надсилає документ, називають часом відповіді сервера або Time To First Byte (TTFB).
На час відповіді сервера суттєво впливає кількість та якість програмного коду, якість бази даних, кількість обчислювальних ресурсів на сервері і відвідуваність сайту. Оскільки TTFB вимірюється до отримання першого байту, то до факторів впливу можна також віднести відстань від серверу до користувача і швидкість з'єднання.
Кешування сторінок призводить до того, що коли сторінка сформувалась, вона запам'ятовується в пам'яті сервера (в кеші) і при наступному запиті цієї сторінки, процес генерації вже не відбувається, а користувачу надсилається вже готовий документ, що значно знижує TTFB, особливо на повільних сайтах.
Чи можна вважати кешування прискоренням сайту?
В більшості матеріалів ви побачите, що кешування є прискоренням і його дуже активно пропонують використовувати. А враховуючи те, що на ринку є достатньо різних модулів і плагінів для кешування під популярні CMS, це виглядає ще й як дуже дешеве та ефективне прискорення.
Але я не можу назвати це прискоренням. Кешування - це не оптимізація процесу створення сторінки, це зміна цього процесу. Це дуже важливо розуміти, бо це має наслідки, адже сайт починає інакше функціонувати і це може бути важко помітити.
Основа проблема полягає в тому, що користувач може отримати неактуальну сторінку, бо вона не генерується, а береться з пам'яті. Звісно, від цього страждають сайти, на яких часто змінюється інформація, на кшталт інтернет-магазинів.
Які проблеми слід очікувати при використанні кешу сторінок сайту?
Перед розглядом проблем зазначу, що жодна з них не є обов'язковим наслідком. Система кешування може бути дуже якісною, але це велика рідкість і буває тільки там, де ця система кастомно створена під задачі конкретного проекту. Але всюди, де за кешування відповідає стандартний плагін CMS, будуть зазначені нижче проблеми.
Для розгляду проблем давайте уявимо цілком реальну ситуацію. Сайт має TTFB 1,5 секунди. Встановили плагін кешування, і TTFB впав до 0,05 секунди. Замовник бачить, що сайт почав літати, і він дуже радий такій оптимізації. Але він не тестує сайт ретельно, не використовує його як покупець і не бачить підводних каменів у вигляді неактуальної інформації, повільних некешованих сторінок, повільних сторінок після оновлення кешу і взагалі не бачить реальної картини швидкості сайту.
Неактуальність інформації про товар
Найчастіше у товарів змінюється інформація про ціну і залишки. Якщо плагін кешування якісний, то зміни інформації про товар в адмінці призведуть до оновлення кешу і покупці будуть бачити актуальну інформацію.
Але ми стикаємось з оновленням кешу, тобто сторінка знов має згенеруватись за 1,5 секунди. А зміна ціни одного товару запустить оновлення всього кешу, бо дуже важко врахувати всі точкові зв'язки цього товару. Він відображається в категоріях, в рекомендованих товарах, в інших модулях, і всюди треба оновити інформацію.
Чим обернеться для вас оновлення кешу - залежить від логіки модуля. Він може або генерувати новий кеш для кожної сторінки, коли на неї вперше зайде людина, і ці відвідування будуть повільними. Або ж машина запустить автоматичне генерування кешу всіх сторінок, що, цілком можливо, покладе вам сервер. Частіше використовується перший варіант. Але якщо на сайті вручну міняють ціни та залишки, це постійно запускає процес скидання кешу, і дуже часто ваші покупці будуть бачити сайт повільним, хоча ви можете цього не помічати. І навіть при скаргах на швидкість, власники сайту часто думають, що проблема в швидкості інтернету користувача, адже в них сайт відкривається швидко.
Якщо в інтернет-магазині багато товарів, то ціни і залишки не змінюють вручну через адмінку. Це зміни проводять шляхом імпорту з файлів або систем обліку складу, тобто через нестандартні інструменти двигуна, і модуль кешування про них нічого не знає, а значить не оновить кеш, і покупцям буде показана неактуальна інформація.
Відсутність персоналізації
Зазвичай, інтернет-магазини своїм функціоналом передбачають якусь персоналізацію. Тобто, відображення інформації чи стану персонально для відвідувача. Наприклад, доданий товар в кошик, додані товари до обраного, стан авторизованого клієнта, перелік переглянутих товарів та інше.
Ці персоналізації з'являються у відповідь на дії користувача, але закешована сторінка не знає про ці дії. Кеш може знати про додані в кошик товари, якщо базова функція не кастомізована, а от все інше, зазвичай, унікально зроблено на рівні шаблонів і не підтримується стандартними модулями кешування. Тож, покупець не зможе подивитись сторінки кабінету клієнта, переглянуті товари чи обране.
Некешовані сторінки
При використанні модулів кешування до CMS у вас завжди будуть залишатись некешовані сторінки, якщо вони формуються стороннім функціоналом.
Такими сторінками можуть бути сторінки результатів фільтрації (якщо фільтр сторонній і в нього немає власного кешу), сторінки блогу чи відгуків. Також, іноді стандартними модулями кешу не передбачено стандартні для CMS технічні сторінки. Наприклад: сторінки пейджинації, сортування, результатів пошуку.
Тобто, при реальному використанні сайту користувач буде бачити більшість таких технічних некешованих сторінок, які будуть повільно генеруватись.
Сміттєзбирання та обслуговування кешу
При роботі кешування, на сервері в пам'яті буде лежати багато кешованих сторінок. Час від часу сервер має оцінити їх актуальність і викинути застаріле сміття. Якщо сайт має багато сторінок і багато відвідувачів, то кількість сторінок в кеші може бути астрономічною. В цих умовах на оцінку актуальності може витрачатись надто багато процесорних ресурсів і часу, що може значно сповільнювати роботу сайту. Це стосується не тільки роботи зі сміттям, а й іншого технічного обслуговування кешування, яке значно складніше пояснити.
Неусвідомлення реальності
Кеш може приховувати реальні проблеми зі швидкістю. З моменту підключення кешу на сайті могла збільшитись відвідуваність і активність ботів, а реальний TTFB міг сягнути 5 секунд, але власник сайту про це не знає, бо це йому не траплялося на очі. Але ми вже розібрали, що при реальному використанні сайту відвідувачі можуть часто стикатись з некешованими сторінками, які стають дедалі повільнішими.
В чому головна проблема використання кешування сторінок?
Головна проблема в нерозумінні того, що це за інструмент, як він працює і коли його варто застосовувати.
Кеш варто застосовувати лише на сайтах, які вже швидкі самі по собі, - для роботи з навантаженням.
Якісний інструмент кешування може бути дуже складним і дорожчим у впровадженні, ніж пряма оптимізація коду чи бази даних.
Цей інструмент потрібен великим високонавантаженим сайтам, які вже зробили все можливе для оптимізації навантаження.
FAQ
Чи прискорює кешування сайт?
Ні, кешування не прискорює сайт у прямому сенсі — воно не оптимізує процес створення сторінки, а змінює його: замість генерації сторінки заново користувачу віддається вже готовий, збережений раніше варіант. TTFB справді падає, але це не усунення реальних проблем швидкості, а їх приховування за рахунок показу готового, часто застарілого, документа.
Чому після встановлення кешу деякі сторінки сайту працюють повільно?
Модулі кешування не охоплюють сторінки, які формуються стороннім функціоналом, а також можуть не кешувати технічні сторінки сайту: сторінки результатів фільтрації, пошуку, сортування, пейджинації. Такі сторінки продовжують генеруватись щоразу заново і залишаються повільними, навіть якщо решта сайту працює швидко.
Кому насправді потрібне кешування сторінок?
Великим високонавантаженим сайтам, які вже провели всю можливу оптимізацію коду і бази даних, але цього недостатньо для роботи під навантаженням. Також кешування можна використовувати для поліпшення TTFB невеликих повільних сайтів, на яких не змінюється інформація (лендінги, візитки).
Чи можна кешувати сторінки без побічних ефектів?
Теоретично так, якщо система кешування кастомно розроблена під конкретний проект з урахуванням усіх його особливостей. Але це велика рідкість і може бути суттєво дорожче за реальне прискорення сайту.
