Характеристики на вграденото кеширане на Drupal

Днес ще преведем кратка публикация в блога на Крис Джонсън относно характеристиките на вграденото кеширане на Drupal.От Крис : Кеширането обикновено се използва за подобряване на производителността на сайтовете на Drupal и има много модули и настройки за контрол на изтичането на елементите в кеша. Въпреки това настройките за кеширане по подразбиране, налични в менюто за производителност, често се тълкуват погрешно и различните бекендове за кеширане се държат малко по-различно. Проблемът е как тези настройки влияят на кеширането на страницата и как се държат двата най-често използвани бекенда за кеширане.

Кеширане на страници за анонимни потребители

Първата настройка е Кеширане на страници за анонимни потребители. Тази настройка казва на Drupal да запази генерираната страница за един анонимен потребител и да я покаже на други анонимни потребители. Страниците се записват с URL адрес на заявка, технически $base_root. request_uri(), така че заявките за http://example.com/page_one и http://example.com/page_one?rand=1 се считат за различни и се генерират отделно, дори ако '?rand=1' не засяга генерирането на страница, т.е. получените страници са еднакви.

Веднага след като опцията за кеширане на страници е активирана, стават достъпни две настройки: Минимален живот на кеша и Максимално време (изтичане на кешираните страници).

Минималният живот на кеша често се разбира погрешно и хората си мислят, че „страницата ще се обнови след това време“. Всъщност страницата няма да бъде обновена, докато не изтече това време и не настъпи събитието за изчистване на кеша. Ще обсъдим събитието за промиване на кеша, след като разгледаме параметъра за максимално време.

Параметърът Максимално време също епонякога неразбрани. Този параметър контролира каква стойност ще бъде изпратена в параметъра max-age на заглавката Cache-control и по този начин казва на прокси сървъра колко дълго проксито може да обслужва тази страница, без да иска от Drupal актуализирано копие на страницата. Това означава, че проксито трябва да поиска от Drupal нова версия на страницата. Drupal ще регенерира страницата, след като се изпълни събитието за изчистване на кеша.

Изчистване на събитието в кеша

Вече споменах събитието за промиване на кеша няколко пъти и разбирането на този механизъм е най-важно при работа с кеширане в Drupal. Drupal ще генерира страници, когато има причина да смята, че резултатът от генерирането на страница ще бъде различен от предишния резултат. Събитието за промиване на кеша кара Drupal да "мисли", че резултатът ще бъде различен. На първо място, това се случва, защото се извиква функцията cache_clear_all. Събитието за промиване на кеша и как то взаимодейства с настройката за минимален живот на кеша варира в зависимост от използвания метод за съхранение на кеша.

За съхраняване на кеша най-често използваната база данни и Memcached (клас DrupalDatabaseCache и клас MemCacheDrupal). По-долу е дадена таблица на поведението на тези бекендове за кеширане при задействане на типични събития за изчистване на кеша.

Кеш съхранение Cron Cache Изчистване на цялата модификация на съдържанието
База данниКешът ще бъде изчистен след минималния живот на кеша.Кешът се изчиства незабавно и ще бъде изчистен отново след изтичане на минималния живот на кеша.Кешът ще бъде изчистен след минималния живот на кеша.
memcachedНе се счита за събитие за промиване на кеша.Страници, генерирани преди [Текущо време] - [Минимален живот на кеша],считани за остарели. Страниците, генерирани след това, не се считат за остарели, докато не се задейства следващото събитие за изчистване на кеша.Страниците, генерирани преди [Текущо време] - [Минимален живот на кеша], се считат за остарели. Страниците, генерирани след това, не се считат за остарели, докато не се задейства следващото събитие за изчистване на кеша.

Третирането на cron като събитие за промиване на кеша при използване на база данни за съхраняване на кеша, заедно с честите стартирания на cron, е причината, поради която потребителите, запознати с Drupal, мислят за настройката за минимален живот като „страниците ми ще бъдат опреснени след това време“. Това също е причина за разочарование за потребителите, които решат да запазят страниците в кеша, докато съдържанието се промени. Разбирането на поведението на Drupal при кеширане, как той взаимодейства с прокси сървъри като Varnish и как се държи кеширащият бекенд в различни ситуации е много важно, за да се гарантира, че кешираното съдържание се актуализира, когато е необходимо, и се кешира правилно, когато няма актуализации.