Каждый разработчик WordPress сталкивался с необходимостью ускорить свой сайт и сделать его более отзывчивым. Часто решение сводится к установке множества плагинов для кеширования, оптимизации и минификации. Однако слишком большое количество плагинов может замедлять сайт и усложнять поддержку. В этой статье разберём, как улучшить производительность WordPress, используя только возможности самого WordPress и минимальный кастомный код.
Почему важно оптимизировать WordPress без плагинов
Плагины — это удобно, но они добавляют нагрузку на сервер, могут конфликтовать друг с другом и создавать уязвимости. Оптимизация без плагинов позволяет:
- Уменьшить время ответа сервера;
- Сократить количество запросов к базе данных;
- Снизить нагрузку на хостинг;
- Получить более точный контроль над процессами.
Для сайтов с ограниченными ресурсами сервера или на shared-хостинге это особенно актуально.
Оптимизация запросов к базе данных
Часто причиной медленной работы сайта бывают неоптимальные запросы к базе данных. В WordPress есть встроенные инструменты для отслеживания и оптимизации запросов.
Использование WP_DEBUG и SAVEQUERIES
Для начала включим ведение логов запросов, чтобы выявить проблемные:
define('WP_DEBUG', true);
define('SAVEQUERIES', true);После этого можно вывести список запросов в шаблоне для анализа:
function wptool_debug_queries() {
global $wpdb;
echo '<pre>';
print_r($wpdb->queries);
echo '</pre>';
}
add_action('wp_footer', 'wptool_debug_queries');Проанализируйте, какие запросы выполняются часто и долго. Например, запросы с мета-записями (meta_query) могут быть крайне ресурсоёмкими.
Оптимизация мета-запросов
Если ваш сайт активно использует meta_query, стоит подумать о добавлении индексов в базу данных для ускорения выборок. Вот пример SQL-запроса для добавления индекса:
ALTER TABLE wp_postmeta ADD INDEX wptool_meta_key(meta_key(191));Также стоит минимизировать количество условий в meta_query и использовать простые типы данных.
Кеширование без плагинов
Кеширование — ключевой элемент оптимизации. Рассмотрим варианты кеширования с помощью PHP и WordPress API.
Объектное кеширование с Transients API
WordPress предоставляет удобный механизм временного кеширования данных — Transients API. Он позволяет сохранять данные в базе с временем жизни, чтобы не выполнять тяжелые операции при каждом запросе.
Пример кеширования результата тяжелого запроса:
function wptool_get_expensive_data() {
$cache_key = 'wptool_expensive_data';
$data = get_transient($cache_key);
if (false === $data) {
// Здесь имитация тяжелой операции
$data = array();
for ($i = 0; $i < 10000; $i++) {
$data[] = $i * 2;
}
set_transient($cache_key, $data, HOUR_IN_SECONDS);
}
return $data;
}Такой подход позволяет существенно снизить нагрузку при повторных обращениях.
Использование опкода кеширования PHP
Убедитесь, что на вашем сервере включён кеш опкодов (OPcache). Это значительно ускорит выполнение PHP-кода без дополнительных настроек в WordPress.
Оптимизация загрузки стилей и скриптов
Частая причина тормозов — подключение слишком большого количества CSS и JS файлов. Вот как можно оптимизировать это без плагинов.
Объединение и минификация вручную
Объедините несколько CSS/JS файлов в один и минимизируйте их с помощью инструментов типа UglifyJS или cssnano. Затем подключайте один файл вместо множества.
Отложенная загрузка скриптов
Вы можете добавить атрибут defer к скриптам, чтобы они загружались после основного контента:
function wptool_defer_scripts($tag, $handle) {
$scripts_to_defer = array('jquery', 'wptool-custom-script');
if (in_array($handle, $scripts_to_defer)) {
return str_replace(' src', ' defer="defer" src', $tag);
}
return $tag;
}
add_filter('script_loader_tag', 'wptool_defer_scripts', 10, 2);Это ускорит отображение страницы для пользователя.
Оптимизация изображений и медиа
Изображения часто являются самым тяжелым элементом страницы. Без плагинов можно использовать несколько трюков.
Использование атрибута loading="lazy" для отложенной загрузки
Начиная с WordPress 5.5, к тегам <img> автоматически добавляется атрибут loading="lazy". Если у вас кастомный вывод изображений, добавьте его вручную:
function wptool_add_lazy_loading($content) {
return str_replace('<img', '<img loading="lazy"', $content);
}
add_filter('the_content', 'wptool_add_lazy_loading');Оптимизация размеров изображений
Генерируйте изображения нужного размера с помощью функций WordPress. Не используйте оригиналы с высоким разрешением, если это не требуется. Пример получения URL миниатюры:
$thumbnail_url = get_the_post_thumbnail_url($post->ID, 'medium');Используйте правильные размеры в add_image_size, чтобы избежать лишней нагрузки.
Оптимизация базы данных и очистка
Регулярная очистка базы данных помогает поддерживать её в хорошем состоянии.
Удаление ревизий записей
Ревизии записей занимают место и замедляют запросы. Можно очистить их с помощью следующего кода:
function wptool_delete_post_revisions() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}
// Вызывать при необходимости, например, через wp-cli или вручнуюОптимизация таблиц базы данных
Выполняйте оптимизацию таблиц через SQL или с помощью wp-cli:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options;Или через команду:
wp db optimizeПолезные советы и рекомендации
- Используйте
wp_enqueue_scriptиwp_enqueue_styleграмотно, чтобы избежать дублирования. - Минимизируйте использование сторонних шрифтов и скриптов.
- Регулярно проверяйте скорость сайта с помощью инструментов Google PageSpeed Insights и GTmetrix.
- Настройте HTTP-заголовки для кеширования статики на стороне сервера.
Оптимизация WordPress без плагинов — это комплексный процесс, требующий внимания к деталям и понимания архитектуры CMS. Применяя описанные методы, вы существенно повысите производительность сайта и улучшите опыт пользователей.