Большое потребление CPU

Как ускорить WordPress — избавляемся от admin-ajax

В техническую поддержку Айри.рф часто задают вопросы, связанные с работой скрипта admin-ajax.php на хостинге (часто его работа прерывается, заканчивается ошибкой или вызывает большую нагрузку на хостинг). Как решить все эти проблемы?

Что такое admin-ajax.php

Скрипт admin-ajax.php (так называемый WordPress heatbeat, включен с версии WordPress 3.5.2) выполняет продление пользовательской сессии WordPress — для удобства использования административной панели. Если администратор или редактор часто работает с сайтом, то это избавляет от необходимости каждый раз вводить логин/пароль. Но для 99% посетителей сайта этот функционал, скорее всего, не нужен: они ведь только читает контент, не редактируют его.

В ряде случаев admin-ajax.php может отвечать за повышенное потребление памяти и CPU на хостинге: за счет частых — каждые 15 секунд — обращений к базе данных на фоне других запросов (большинство из которых уже могут быть закэшированы). Поскольку функционал admin-ajax.php является динамическим (его нельзя кэшировать), то облако Айри, как и любой другой кэширующий инструмент, пропускает все запросы напрямую к серверу, создавая существенную нагрузку.

Как бороться с admin-ajax.php

Лучшим способом устранение нагрузки от admin-ajax.php является полное отключение этого функционала. Лучше всего это осуществить либо редактированием внутри движка WordPress, либо путем установки соответствующего плагина.

Для отключения WordPress Heartbeat для всех страниц, кроме страницы создания новой записи, нужно добавить в header.php вашей темы:

add_action( 'init', 'my_deregister_heartbeat', 1 );
function my_deregister_heartbeat() {
	global $pagenow;

	if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow )
		wp_deregister_script('heartbeat');
}

Для решения этой проблемы через плагины WordPress можно использовать AJAX Heartbeat Tool или Heartbeat Control.