В статье собраны мои практики, которые я применяю для ускорения работы сайта на платформе WordPress или интернет-магазина на WordPress + Woocommerce.
Хочу предупредить сразу — это не Google Page Speed.

Хостинг для WordPress.

По этому поводу написано множество статей и рекомендаций, повторяться нет смысла. Вот кратко мои практические советы:

Виртуальный хостинг подходит под:

  • небольшой сайт/блог/etc с невысокой посещаемостью
  • небольшой интернет-магазин + блог с невысокой посещаемостью

VPS подходит для:

  • корпоративный сайт/блог со средней посещаемостью
  • интернет-магазин с количеством товаров до 2000 и средней посещаемостью

Параметры VPS — минимум два процессора и 4 гБ памяти.

Выделенный сервер:

Здесь фантазия ограниченна только здравым смыслом, а начинаться он должен с минимум четырех процессоров и 8 гБ памяти.

В качестве хостинг-провайдера я рекомендую “HOSTPRO”, с которым работаю уже больше десяти лет.

Параметры хостинга.

Правильно настроенный хостинг — это половина скорости работы сайта. Я использую следующие настройки:

Настройки PHP

  • PHP версии от 7.1 и выше
  • Памяти под процесс (memory_limit) – 512
  • Время выполнения скрипта (max_execution_time) 300

Модуль Zend OPCache

  • opcache.enable=1
  • opcache.validate_timestamps=1
  • opcache.revalidate_freq=60
  • opcache.max_accelerated_files=10000
  • opcache.memory_consumption=64
  • opcache.interned_strings_buffer=8
  • opcache.fast_shutdown=1

Модуль Memcached
Модуль Igbinary

  • igbinary.compact_strings

Настройки MySQL

Про настройку конфиграций для MySql есть хорошая статья
«Примеры конфигураций сервера»
https://ruhighload.com/mycnfexample

На этом настройку серверной части я заканчиваю, хотя тут еще много работы для системного администратора.

Переходим к настройке сайта

Тема для WordPress + Woocommerce

Если хороший хостинг – это 50% успеха, то хорошо оптимизированная тема — это следующие 25%, остальные 25%  — это плагины.  По выбору темы есть много отдельных статей, останавливаться не буду, порекомендую SHoptimizer

Плагины для ускорения работы сайта

Общее замечание по плагинам – необходимо применять их исключительно по необходимости и, как будет показано ниже на примере Contact Form 7, подключать их на тех страницах, где они используются.

PHP код для ускорения работы сайта

Далее будут вставки php кода, который необходимо добавлять в function.php дочерней темы. Надеюсь, что такое дочерняя тема — знают все.

Ускоряем админку:

Первая часть:

* Отключаем принудительную проверку новых версий WP, плагинов и темы в админке, чтобы она не тормозила, когда долго не заходил и зашел…
* Все проверки будут происходить незаметно через крон или при заходе на страницу: «Консоль > Обновления».

if( is_admin() ){
// disable update check
remove_action( 'admin_init', '_maybe_update_core' );
remove_action( 'admin_init', '_maybe_update_plugins' );
remove_action( 'admin_init', '_maybe_update_themes' );
remove_action( 'load-plugins.php', 'wp_update_plugins' );
remove_action( 'load-themes.php', 'wp_update_themes' );

add_filter( 'pre_site_transient_browser_'. md5( $_SERVER['HTTP_USER_AGENT'] ), '__return_true' );
}

Вторая часть —  ее стоит применять очень осторожно, она отключает стили и js скрипты на тех страницах, где woocommerce нет

add_action( 'wp_enqueue_scripts', 'child_manage_woocommerce_styles', 99 );
function child_manage_woocommerce_styles() {
//remove generator meta tag
remove_action( 'wp_head', array( $GLOBALS['woocommerce'], 'generator' ) );
//first check that woo exists to prevent fatal errors
if ( function_exists( 'is_woocommerce' ) ) {
//dequeue scripts and styles
if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() ) {
wp_dequeue_style( 'woocommerce_frontend_styles' );
wp_dequeue_style( 'woocommerce_fancybox_styles' );
wp_dequeue_style( 'woocommerce_chosen_styles' );
wp_dequeue_style( 'woocommerce_prettyPhoto_css' );
wp_dequeue_script( 'wc_price_slider' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-cart-fragments' );
wp_dequeue_script( 'wc-checkout' );
wp_dequeue_script( 'wc-add-to-cart-variation' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-cart' );
wp_dequeue_script( 'wc-chosen' );
wp_dequeue_script( 'woocommerce' );
wp_dequeue_script( 'prettyPhoto' );
wp_dequeue_script( 'prettyPhoto-init' );
wp_dequeue_script( 'jquery-blockui' );
wp_dequeue_script( 'jquery-placeholder' );
wp_dequeue_script( 'fancybox' );
wp_dequeue_script( 'jqueryui' );
}
}
}

Убираем WP-Syntax

remove_action( 'wp_head','wp_syntax_head');

Вызываем Contact Form 7 (если он у вас есть) только на тех страницах, где он используется

// Deregister Contact Form 7 styles

add_action( 'wp_print_styles', 'aa_deregister_styles', 100 );
function aa_deregister_styles() {
if ( ! is_page( get_theme_mod( "header_contacts") ) ) {
wp_deregister_style( 'contact-form-7' );
}
}

// Deregister Contact Form 7 JavaScript files on all pages without a form
add_action( 'wp_print_scripts', 'aa_deregister_javascript', 100 );
function aa_deregister_javascript() {
if ( ! is_page( get_theme_mod( "header_contacts") ) ) {
wp_deregister_script( 'contact-form-7' );
}
}