прискорення drupal

Вирішив написати оглядовий пост про методи кешування Drupal сайтів і знайшов на просторах Інтернету статтю від технічного консультанта Acquia, якраз зачіпає цю тему. Тому сьогодні буде переклад цієї статті.

Це перший пост в блозі з серії про стратегії кешування в Drupal. У цьому пості ми спробуємо зрозуміти які можливості в плані кешування є в Drupal "з коробки", і які можливості розширення для роботи сайтів під високими навантаженнями.
На відміну від статичних HTML сайтів сторінки Drupal сайту складаються з блоків, які формуються незалежно один від одного, перед тим як будуть об'єднані і відправлені в браузер як єдине ціле. Drupal це динамічна платформа, яка генерує контент, тому для генерації сторінки, яка буде відправлена ​​в браузер, на веб-сервері виконується послідовність дій, таких як: з'єднання з базою даних, завантаження параметрів і модулів, ініціалізація користувача сесії, перетворення URL в виклик PHP для запуску логіки додатка, і збір воєдино всіх елементів навколо основного вмісту сторінки.

Більшість з цих кроків повторюється кожного разу, під час генерації сторінки, але за допомогою ефективної стратегії кешування можна мінімізувати використання ресурсів, під час виконання цих кроків, шляхом збереження результату повторюваних обчислень. Це стає складніше з трафіком від зареєстрованих користувачів, так як для них використовуються персоналізовані сторінки, що виключає можливість кешування сторінки цілком. У цих більш складних випадках використовується кеш нижчого рівня для зберігання окремих блоків сторінки.
Чим більше елементів кешируєтся, тим уважніше потрібно ставитися до бекенд, який зберігає інформацію.
За замовчуванням Drupal кешируєт інформацію прямо в базу даних. Це видно з багатьох таблиць в базі Drupal імена яких починаються на "cache_".
В Drupal є можливість кешувати сторінки цілком або їх частини і використовувати цю інформацію знову для генерації нових сторінок.

кешування сторінок

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

  • Зворотний проксі (зовн кешування). Зворотний проксі (reverse proxy) - це тип проксі сервера, який від імені клієнта запитує інформацію від одного або декількох серверів. Використання зворотного проксі сервера Varnish користується популярністю в архітектурі (ІТ інфраструктурі) високонавантажених Drupal проектів. Varnish знаходиться перед веб-сервером і кешируєт запити, у яких немає cookies. Varnish може бути використаний для кешування анонімних запитів, так як він неймовірно швидкий за рахунок зберігання всього кеша в пам'яті і, при необхідності, на жорсткому диску. Drupal 7 має вбудовану підтримку Varnish, в той час як для інтеграції з Drupal 6 необхідно використовувати Pressflow, щоб в анонімних запитах не було cookies. За замовчуванням модуль Drupal Varnish буде використовувати параметр "Максимальний час життя кешу" для визначення Expiration date, але, наприклад, модуль Expire може бути використаний для очищення кеша Varnish при зміні контенту, гарантуючи користувачам найсвіжішу інформацію. Сторінки, що передаються безпосередньо з кешу Varnish, містять додаткову інформацію, яка допомагає визначити чи коректно працює кешування. У Acquia ми фанати varnish, будь-яка сторінка передана з хмари acquia містить цю інформацію, наприклад, acquia.com:
  • Boost. Boost - це модуль, який використовує модифікований файл .htaccess для завантаження сторінок з диска замість запуску PHP для динамічної генерації сторінки. Цей модуль генерує HTML сторінки кожен раз, коли на сторінку здійснюється доступ і зберігає цю сторінку в HTML файл на диск. При наступному запиті Apache перед запитом до Drupal перевірить наявність на диску HTML файлу і спробує видати цей файл. У модуль Boost включений краулер, який запускається по крону і заново генерує застарілий контент, для більш швидкого завантаження сторінок. Сторінки видані безпосередньо з кешу Boost містять в коротку мітку в кінці HTML коду, наприклад:
  • Вбудоване кешування. В Drupal є можливо зберігати сторінки безпосередньо в кешуючий бекенд. Якщо кешування включено, то Drupal буде кешувати сторінки для анонімних користувачів кожен раз, коли сторінка буде згенеровано. Наступний анонімний запит отримає кешовану версію сторінки замість генерації сторінки заново.

При завантаженні сторінки з кеш-пам'яті не будуть викликатися Drupal хукі (викликаються тільки hook_boot і hook_exit), тому перед включенням кешування важливо переконатися, що хукі не повинні викликатися на кожному запиті сторінки.

Схожі статті