Выполните действия:
1. Откройте файл «wp-config.php» (находится в корневой директории сайта)
2. После указания define('WP_DEBUG', false);
с новой строчки пропишите:
define('WP_POST_REVISIONS', 5); define('AUTOSAVE_INTERVAL', 300); |
Пропишите в файле .htaccess правила:
#WP01_CACHING_START # Кэширование <ifModule mod_headers.c> # кэшировать html и htm файлы на 12 часов <FilesMatch "\.(html|htm)$"> Header set Cache-Control "max-age=43200" </FilesMatch> # кэшировать css, javascript и текстовые файлы на одну неделю <FilesMatch "\.(js|css|txt)$"> Header set Cache-Control "max-age=604800" </FilesMatch> # кэшировать флэш и изображения на месяц <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png|webp)$"> Header set Cache-Control "max-age=2592000" </FilesMatch> # кэшировать шрифты на 1 год <FilesMatch "\.(eot|ttf|otf|svg|woff|woff2)$"> Header set Cache-Control "max-age=31556926, public" </FilesMatch> # отключить кэширование для определенных расширений <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> </IfModule> # Условия кэширования <ifModule mod_expires.c> ExpiresActive On #по умолчанию кеш в 5 секунд ExpiresDefault "access plus 5 seconds" #кэшировать флэш и изображения на месяц ExpiresByType image/x-icon "access plus 2592000 seconds" ExpiresByType image/jpeg "access plus 2592000 seconds" ExpiresByType image/jpg "access plus 2592000 seconds" ExpiresByType image/png "access plus 2592000 seconds" ExpiresByType image/gif "access plus 2592000 seconds" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" ExpiresByType image/webp "access plus 2592000 seconds" # кэшировать шрифты на 1 год ExpiresByType application/x-font-ttf "access plus 31556926 seconds" ExpiresByType font/opentype "access plus 31556926 seconds" ExpiresByType application/x-font-woff "access plus 31556926 seconds" ExpiresByType application/x-font-woff2 "access plus 31556926 seconds" ExpiresByType image/svg+xml "access plus 31556926 seconds" ExpiresByType application/vnd.ms-fontobject "access plus 31556926 seconds" #кэшировать css, javascript и текстовые файлы на одну неделю ExpiresByType text/css "access plus 604800 seconds" ExpiresByType text/javascript "access plus 604800 seconds" ExpiresByType application/javascript "access plus 604800 seconds" ExpiresByType application/x-javascript "access plus 604800 seconds" #кэшировать html и htm файлы на 12 часов ExpiresByType text/html "access plus 43200 seconds" #кэшировать xml файлы на десять минут ExpiresByType application/xhtml+xml "access plus 600 seconds" </ifModule> #WP01_CACHING_END |
Пропишите в файле .htaccess правила:
#WP01_COMPRESSING_START <IfModule mod_deflate.c> # Сжатие HTML, CSS, JavaScript, текста, XML и шрифтов AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/font-woff AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE font/woff AddOutputFilterByType DEFLATE font/eot AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE image/ico AddOutputFilterByType DEFLATE image/webp AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml </IfModule> #WP01_COMPRESSING_END |
Быстродействие* WordPress 5.3 на разных версиях PHP:
версия PHP | запросов/сек | быстрее, чем PHP 5.6 |
---|---|---|
5.6 | 97,71 | в 0 раз |
7.0 | 256,81 | в 2,63 раз |
7.1 | 256,99 | в 2,63 раз |
7.2 | 273,07 | в 2,79 раз |
7.3 | 305,59 | в 3,13 раз |
7.4 | 313,42 | в 3,21 раз |
Вывод: PHP 7.4 в 3,21 раза быстрее (больше обрабатывает запросов в секунду), чем PHP 5.6. * по данным WPGutenberg
Подтвержденная поддержка:
с WordPress 5.2: PHP 5.6.20-7.3
с WordPress 5.3: PHP 5.6.20-7.4
Алгоритм изменения версии PHP:
1. Проверьте совместимость тем и плагинов с более свежей версией PHP с помощью «PHP Compatibility Checker»
2. Перейдите в панель управления вашим хостингом (например, ISPmanager)
3. В настройках сайта постепенно (например, 5.4 -> 5.5 -> 5.6 -> 7.0) увеличивайте версию PHP до максимально поддерживаемой (по данным «PHP Compatibility Checker»), параллельно тестируя проект на наличие ошибок
4. Если при активации более свежей версии PHP на сайте появляются ошибки — верните версию к ранее используемой, при необходимости обратитесь в техподдержку хостинга
Воспользуйтесь online сервисами:
https://imagecompressor.com/ru/ — оптимизация с управлением качества до 20 изображений за 1 раз.
https://tinypng.com/ — оптимизация (автоматический выбор качества) до 20 изображений (максимум 5 Мб.) за 1 раз.
https://www.onlineimagetool.com/ru/ — оптимизация PNG/JPG/WEBP/GIF изображений (без ограничений по количеству).
https://compressor.io/ — оптимизация с выбором типа сжатия до 100 JPEG, PNG, SVG, GIF и WEBP изображений (или 10 Мб.) за 1 раз.
https://gifcompressor.com/ru/ — оптимизация до 20 GIF изображений за 1 раз.
GIF Optimizer — программа (OS Windows) для оптимизации GIF (работает с 1 файлом за 1 раз).
GIFmicro — программа (OS Windows) для оптимизации GIF (массовая работа).
Воспользуйтесь online сервисами:
Nano SVG — автоматическая оптимизация до 10 изображений (максимум 5 Мб.) за 1 раз.
SVG Optimizer (Jake Archibald) — пошаговая оптимизация 1 изображения.
SVG Optimizer (Peter Collingridge) — оптимизация 1 изображения с возможностью определения детализации.
COMPRESSOR — оптимизация с выбором типа сжатия до 100 SVG изображений (или 10 Мб.) за 1 раз.
Довольно часто в теме сайта используется собственный (не с fonts.gstatic.com) файл иконок, который содержит огромное количество векторных изображений.
Хорошая практика — использовать только нужные иконки.
Создание оптимизированного файла иконок:
1. В сервисе http://fontello.com/ выберите используемый на вашем сайте набор иконок (например, Font Awesome).
2. Отметьте нужные иконки в наборе и нажмите «Download webfont» для сохранения.
3. Разместите сгенерированный файл в папку с нахождением иконок (например, wp-content/themes/имя_темы/assets/fonts)
Пропишите в файле .htaccess правила:
#WP01_HOTLINKS_START <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ #исключаем наш сайт RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?SAIT.RU [NC] #добавляем домены в исключения RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yandex.ru [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mail.ru [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?subscribe.ru [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?feedburner.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?rambler.ru [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?bing.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?ask.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yahoo.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tut.by [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?webalta.ru [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?qip.ru [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?poisk.ru [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?ukr.net [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?metabot.ru [NC] #форматы, которые обрабатываем RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L] </IfModule> #WP01_HOTLINKS_END |
Внесите правки в CSS файл и дополните «@font-face» условиями:
1. Установите плагин «String locator» и перейдите в его настройки
2. Выберите в пункте «Search through» плагина активную тему сайта
3. Введите в поле «Search string» значение «@font-face
» и нажмите «Search»
4. Поиск отразит в таблице файлы и номера строк, где были найдены значения «@font-face»
5. Внесите правки во все значения «@font-face
«:
5.1. Добавьте «local('Pacifico Regular'), local('Pacifico-Regular'),
» после «src:»
5.2. Добавьте «font-display: swap;
» перед «}
»
5.3. Сохраните файл, проверьте работу сайта
Используйте «preload» условия:
1. Откройте файл header.php, находящийся в папке используемой темы (/wp-content/themes/название_темы/)
2. Добавьте до тега код:
<link rel="preload" as="font" href="УРЛ адрес до веб-шрифта" type="font/woff2" crossorigin> |
Внесите правки:
1. Уточните текущий лимит памяти для сценариев, установив плагин «Server IP & Memory Usage Display» (доступен в таблице выше)
2. Допишите в файл wp-config.php (находится в корне сайта), перед строкой «/* Это всё, дальше не редактируем. Успехов! */» условие:
define( 'WP_MEMORY_LIMIT', 'xyzM' ); |
где «xyz» — значение, превосходящее текущий лимит, но не больше, чем предоставленно хостингом.
3. Проверьте сработку условия через установленный плагин (шаг 1).
Рекомендации:
1. Обязательно создайте бэкап редактируемого файла
2. Для сайтов с низкой нагрузкой минимально рекомендуемое значение WP_MEMORY_LIMIT составляет 64. При установленном WooCommerce — 96
3. Если условие не применилось — попробуйте прописать код без пробелов: define('WP_MEMORY_LIMIT', 'xyzM');
или измените memory_limit= xyzM в php.ini файле хостинга.
4. При ошибке ограничения памяти в админ панели WordPress — пропишите define( 'WP_MAX_MEMORY_LIMIT', 'xyzM' );
перед строкой «/* Это всё, дальше не редактируем. Успехов! */». В этом случае «xyz» должно быть больше в 2 и более раз, чем для WP_MEMORY_LIMIT, но не превышать предоставленный хостингом лимит.
Создайте список предварительных соединений:
1. Откройте файл header.php, находящийся в папке используемой темы (/wp-content/themes/название_темы/)
2. Добавьте до тега код, указав адреса наиболее значимых/первостепенных внешних подключений (до 6 шт.):
<link rel="dns-prefetch" href="УРЛ адрес сайта" /> |
Установите код запрета иконок:
Если в публичной части сайта не используется файл иконок «Dashicons» — отключите его загрузку в Frontend, оставив в Backend
Создайте список предварительных соединений:
1. Откройте файл function.php, находящийся в папке используемой темы (/wp-content/themes/название_темы/)
2. Добавьте код:
// WP01: удаление dashicons START function wpdocs_dequeue_dashicon() { if (current_user_can( 'update_core' )){ return; } wp_deregister_style('dashicons'); } add_action( 'wp_enqueue_scripts', 'wpdocs_dequeue_dashicon' ); // WP01: удаление dashicons END |
?>
» разместите код до него.Изучите код на асинхронность:
Сервис Яндекс.Метрика с обновлением функционала актуализирует код, который необходимо размещать на сайте.
Старые версии метрики работают без использования асинхронного метода загрузки, что плохо влияет на быстродействие.
Проверьте код:
1. Найдите расположение кода Я.Метрика на сайте (обычно находится в файле footer.php, или header.php используемой темы)
2. Изучите код на наличие k.async=1
3. При отсутствии условия асинхронности обновите код, скопировав его с вашего аккаунта на сервисе Я.Метрика
Для проверки обновлений ядра/темы/плагинов при генерации админ страницы, чтобы моментально показать вам результаты поиска новых версий, отправляются HTTP запросы. Такой подход создаёт неоправданную нагрузку и приводит к подвисаниям.
Внедрите код:
1. Откройте файл function.php, находящийся в папке используемой темы (/wp-content/themes/название_темы/)
2. Добавьте код:
//WP01: Отключение агрессивной проверки обновлений START if( is_admin() ){ // Отключаем проверку обновлений при любом заходе в админку 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' ); // Принудительная проверка при заходе на страницу обновлений - оставляем работу //remove_action( 'load-update-core.php', 'wp_update_plugins' ); //remove_action( 'load-update-core.php', 'wp_update_themes' ); // Страница админки "Update/Install Plugin" или "Update/Install Theme" - оставляем работу //remove_action( 'load-update.php', 'wp_update_plugins' ); //remove_action( 'load-update.php', 'wp_update_themes' ); // Событие крона для проверки наличия обновлений - оставляем работу //remove_action( 'wp_version_check', 'wp_version_check' ); //remove_action( 'wp_update_plugins', 'wp_update_plugins' ); //remove_action( 'wp_update_themes', 'wp_update_themes' ); // Отключаем проверку необходимости обновления браузера в консоли add_filter( 'pre_site_transient_browser_'. md5( $_SERVER['HTTP_USER_AGENT'] ), '__return_true' ); } //WP01: Отключение агрессивной проверки обновлений END |
Важно:
1. В случае обновления темы повторите установку кода
2. При нахождении в конце файла functions.php закрытия блока «?>» разместите код до него.
3. Если после установки кода сайт выдаёт ошибку — удалите код и обновите страницу (Ctrl+F5)
Используйте код отложенной загрузки:
1. Найдите расположение кода JivoSite на сайте (обычно находится в файле footer.php, или header.php используемой темы)
2. Удалите используемый код онлайн консультанта, предварительно сохранив идентификатор (см. пример ниже).
3. Используйте модифицированный код, заменив идентификатор на свой:
<!-- WP01: JIVOSITE START --> <script type='text/javascript'> (function(){ document.jivositeloaded=0;var widget_id = 'идентификатор';var d=document;var w=window;function l(){var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = '//code.jivosite.com/script/widget/'+widget_id; var ss = document.getElementsByTagName('script')[0]; ss.parentNode.insertBefore(s, ss);}//Стандартная строка кода JivoSite function zy(){ //Удаление EventListeners if(w.detachEvent){//Поддержка IE8 w.detachEvent('onscroll',zy); w.detachEvent('onmousemove',zy); w.detachEvent('ontouchmove',zy); w.detachEvent('onresize',zy); }else { w.removeEventListener("scroll", zy, false); w.removeEventListener("mousemove", zy, false); w.removeEventListener("touchmove", zy, false); w.removeEventListener("resize", zy, false); } //Запуск функции загрузки JivoSite if(d.readyState=='complete'){l();}else{if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}} //Установка cookie по которому отличаем первый хит от второго var cookie_date = new Date ( ); cookie_date.setTime ( cookie_date.getTime()+60*60*28*1000); //24 часа для Москвы d.cookie = "JivoSiteLoaded=1;path=/;expires=" + cookie_date.toGMTString(); } if (d.cookie.search ( 'JivoSiteLoaded' )<0){//Проверка: первый ли это визит на сайт, если да - назначаем EventListeners на события прокрутки, изменения размера окна браузера и скроллинга на ПК и мобильных устройствах, для отложенной загрузке JivoSite if(w.attachEvent){// Поддержка IE8 w.attachEvent('onscroll',zy); w.attachEvent('onmousemove',zy); w.attachEvent('ontouchmove',zy); w.attachEvent('onresize',zy); }else { w.addEventListener("scroll", zy, {capture: false, passive: true}); w.addEventListener("mousemove", zy, {capture: false, passive: true}); w.addEventListener("touchmove", zy, {capture: false, passive: true}); w.addEventListener("resize", zy, {capture: false, passive: true}); } }else {zy();} })();</script> <!-- WP01: JIVOSITE END --> |
Пример идентификатора в новом коде:
<script src="//code.jivosite.com/widget/идентификатор" async></script> |
Пример идентификатора в старом коде:
<!-- BEGIN JIVOSITE CODE {literal} --> <script type='text/javascript'> (function(){ var widget_id = 'идентификатор';var d=document;var w=window;... |
P.S. Если вы не используете онлайн консультант на своём сайте и не хотели бы видеть его на других проектах сети — установите в браузер блокиратор «Hello, Goodbye»
Произведите действия:
1. Замените код подключения JS скрипта «https://vk.com/js/api/openapi.js» (как правило, размещается в header.php темы сайта) следующей конструкцией:
<script type="text/javascript"> setTimeout(function(){ var VKO = document.createElement("script"); VKO.src = 'https://vk.com/js/api/openapi.js'; VKO.async = true; document.getElementsByTagName('head')[0].appendChild(VKO); VKO.onload = function(){ // ПРИМЕР (стандартный ВК код) инициализации виджета "Сообщения сообщества" VK.Widgets.CommunityMessages("vk_community_messages", 123456789, {expanded: "1",tooltipButtonText: "Есть вопрос?"}); // ПРИМЕР (стандартный ВК код) инициализации виджета для сообществ VK.Widgets.Group("vk_groups", {mode: 3}, 12345678); },5000); // время отложенной загрузки, в миллисекундах (5000 = 5 сек) </script> |
2. Замените код отображения виджета в элементе страницы сайта на облегчённую версию:
Пример отображения виджета «Сообщения сообщества»:
<div id="vk_community_messages"></div> |
Пример отображения виджета для сообществ:
<div id="vk_groups"></div> |
Произведите действия:
1. Узнайте версию jQuery, которую использует сайт. Для этого определите УРЛ адрес, по которому загружается библиотека, а затем откройте её в редакторе. В самом начале файла будет указана версия (например, jQuery v1.12.4).
Методы определения нахождения jQuery:
— Просканируйте сайт в Google PSI и изучите пункт «Устраните ресурсы, блокирующие отображение», в котором (в большинстве случаев) вы увидите ссылку на «jquery.js»
— Откройте код страницы сайта (Ctrl+U) и через поиск (Ctrl+F) найдите файл «jquery.js»
— Запустите консоль разработчика в браузере (Ctrl+Shift+I -> Network -> All), затем найдите используя фильтр файл «jquery.js»
2. В открытом «jquery.js» файле определите использование минификации (удаление пробелов).
Пример:
Стандартный «jquery.js» v3.6.0: https://code.jquery.com/jquery-3.6.0.js — 280,82 Кб.
Минифицированный «jquery.js» v3.6.0: https://code.jquery.com/jquery-3.6.0.min.js — 89,50 Кб.
3. В случае использования на сайте стандартной версии jQuery замените файл на его минифицированную версию.
Произведите действия:
1. Скачайте библиотеку pomodoro
2. Разархивируйте полученный архив и скопируйте из него файл «pomodoro.php» в папку «/wp-content/mu-plugins/»
Скрипт начнёт работу, дополнительных действий не требуется.
Внедрите код:
1. Откройте файл functions.php, находящийся в папке используемой темы (/wp-content/themes/название_темы/) или воспользуйтесь плагином Code Snippets (Шаг 6)
2. Добавьте код:
//WP01: Отключение ресурсов магазина на тех страницах, где они не нужны. START add_action( 'wp_enqueue_scripts', function() { // Если НЕ страницы магазина. if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() ) { // Отключаем стили WooCommerce wp_dequeue_style( 'woocommerce_frontend_styles' ); wp_dequeue_style( 'woocommerce-general'); wp_dequeue_style( 'woocommerce-layout' ); wp_dequeue_style( 'woocommerce-smallscreen' ); wp_dequeue_style( 'woocommerce_fancybox_styles' ); wp_dequeue_style( 'woocommerce_chosen_styles' ); wp_dequeue_style( 'woocommerce_prettyPhoto_css' ); wp_dequeue_style( 'select2' ); // Отключаем скрипты WooCommerce wp_dequeue_script( 'wc-add-payment-method' ); wp_dequeue_script( 'wc-lost-password' ); 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-credit-card-form' ); 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( 'jquery-payment' ); wp_dequeue_script( 'jqueryui' ); wp_dequeue_script( 'fancybox' ); wp_dequeue_script( 'wcqi-js' ); } }, 99 ); //WP01: Отключение ресурсов магазина на тех страницах, где они не нужны. END |