Руководство для новичков по кэшированию данных в Drupal 7
Опубликовано: 10.12.2017
Создавать сложный динамический контент в Drupal - это легко, но всему есть цена. Многие вещи, делающие сайт привлекательным, могут создать "кошмар производительности". Они грузят базу данных сложными запросами и тяжелыми вычислениями каждый раз когда пользователь загружает страницу нашего сайта.
Автоматическое создание спрайта в sass с помощью gulp.
Одно из решений этой проблемы - включить кэширование страниц в разделе администратора "Производительность". Это ускорит загрузку посредством кэширования каждой страницы и сильно сократит количество запросов к базе данных для анонимных посетителей сайта. Однако, это не сработает для авторизированных посетителей, потому что кэширование всей страницы допустимо только для анонимных пользователей, которые получают одинаковую копию одной и той-же страницы сайта.
MODx Revolution. Подготовка сервера и установка.
В конце концов, приходит время, когда вам нужно покопаться в вашем коде, найти узкие места, в которых база данных нагружается больше всего и добавить в них кэширование. К счастью, в Drupal есть встроенный API кэширования, который сделает эту задачу очень простой.
Основы
Первое правило оптимизации и кэширования: "Никогда не делайте что-то затратное дважды если вы можете сохранить результат и использовать его повторно". Рассмотрим небольшой пример этого правила в действии:
function my_module_function ( ) { $my_data = & drupal_static ( __FUNCTION__ ) ; if ( ! isset ( $my_data ) ) { // Здесь делаем сложные вычисления и записываем результат в переменную $my_data // остальные действия с результатом.. } return $my_data ; }Самая важная вещь, на которую нужно обратить внимание в этом примере, это переменная $my_data. Первым делом мы пытаемся инициализировать ее вызовом функции drupal_static(). Функция drupal_static() появилась только в Drupal 7, она предоставляет функциям "временное хранилище" для данных, которые должны быть доступны даже после выполнения функции. При первом вызове drupal_static() вернет пустоту, но любые изменения в этой переменной будут сохранены для следующего вызова этой функции. Таким образом мы можем проверить была ли уже установлена переменная и получить ее немедленно не выполняя при этом никакой дополнительной работы.