• 8-923-009-07-30 (WhatsApp)
  • info@wp01.ru
  • Будни: 07:00-18:00 MSK




Ручные внедрения для ускорения сайта

1. Уменьшите количество ревизий записей, установите интервал автосохранений

Выполните действия:
1. Откройте файл «wp-config.php» (находится в корневой директории сайта)
2. После указания define('WP_DEBUG', false); с новой строчки пропишите:

define('WP_POST_REVISIONS', 5);
define('AUTOSAVE_INTERVAL', 300);

2. Активируйте кэширование

Пропишите в файле .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

3. Сжатие файлов перед отправкой пользователю

Пропишите в файле .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

4. Используйте свежую версию PHP поддерживаемую WordPress

Внимание!
Очень часто переход на более свежую версию PHP вызывает ошибки в работе плагинов, темы и/или CMS.
Рекомендуем производить смену PHP версии непосредственно программистом.
Официальные рекомендации WordPress: https://ru.wordpress.org/support/update-php/

Быстродействие* WordPress 5.3 на разных версиях PHP:

версия PHPзапросов/секбыстрее, чем PHP 5.6
5.697,71в 0 раз
7.0256,81в 2,63 раз
7.1256,99в 2,63 раз
7.2273,07в 2,79 раз
7.3305,59в 3,13 раз
7.4313,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 на сайте появляются ошибки — верните версию к ранее используемой, при необходимости обратитесь в техподдержку хостинга

Справка:
На данный момент максимально поддерживаемая системой WordPress PHP версия 7.4

5. Оптимизируйте png/jpg изображения

Воспользуйтесь online сервисами:
https://imagecompressor.com/ru/ — оптимизация с управлением качества до 20 изображений за 1 раз.
https://tinypng.com/ — оптимизация (автоматический выбор качества) до 20 изображений (максимум 5 Мб.) за 1 раз.

6. Оптимизируйте SVG изображения

Воспользуйтесь online сервисами:
Nano SVG — автоматическая оптимизация до 10 изображений (максимум 5 Мб.) за 1 раз.
SVG Optimizer (Jake Archibald) — пошаговая оптимизация 1 изображения.
SVG Optimizer (Peter Collingridge) — оптимизация 1 изображения с возможностью определения детализации.

7. Оптимизируйте файл иконок

Довольно часто в теме сайта используется собственный (не с fonts.gstatic.com) файл иконок, который содержит огромное количество векторных изображений.
Хорошая практика — использовать только нужные иконки.

Создание оптимизированного файла иконок:
1. В сервисе http://fontello.com/ выберите используемый на вашем сайте набор иконок (например, Font Awesome).
2. Отметьте нужные иконки в наборе и нажмите «Download webfont» для сохранения.
3. Разместите сгенерированный файл в папку с нахождением иконок (например, wp-content/themes/имя_темы/assets/fonts)

Примечание:
1. Обязательно создайте бэкап дефолтного файла набора иконок перед его заменой на сгенерированный.
2. Если вы не знаете где находится файл иконок — изучите данные отчета Google PageSpeed Insights.
Как правило, в пункте «Сократите глубину вложенности критических запросов» или в «Настройте показ всего текста во время загрузки веб-шрифтов» вы найдёте ссылку на файл иконок (например, fontawesome-webfont) с расширением woff2 или woff/ttf.

8. Предотвратите хотлинки на изображения

Внимание!
Обязательно замените «SAIT.RU» на адрес вашего сайта (без http:// и www)

Пропишите в файле .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

9. Настройте показ всего текста во время загрузки веб-шрифтов

Внесите правки в 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. Сохраните файл, проверьте работу сайта

Примечание:
1. Обязательно создайте бэкап редактируемых CSS файлов, или активной темы
2. В случае обновления темы повторите установку кода

10. Настройте предварительную загрузку веб-шрифтов

Используйте «preload» условия:
1. Откройте файл header.php, находящийся в папке используемой темы (/wp-content/themes/название_темы/)
2. Добавьте до тега код:

<link rel="preload" as="font" href="УРЛ адрес до веб-шрифта" type="font/woff2" crossorigin>
Примечание:
1. Обязательно создайте бэкап редактируемого файла
2. В случае обновления темы повторите установку кода
3. Не забудьте заменить значение «УРЛ адрес до веб-шрифта» и MIME-тип

11. Увеличьте лимит памяти для сценариев

Внесите правки:
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, но не превышать предоставленный хостингом лимит.

12. Создайте DNS резолвинг

Создайте список предварительных соединений:
1. Откройте файл header.php, находящийся в папке используемой темы (/wp-content/themes/название_темы/)
2. Добавьте до тега код, указав адреса наиболее значимых/первостепенных внешних подключений (до 6 шт.):

<link rel="dns-prefetch" href="УРЛ адрес сайта" />
Примечание:
1. Обязательно создайте бэкап редактируемого файла
2. В случае обновления темы повторите установку кода
3. Не забудьте заменить значение «УРЛ адрес сайта»

13. Отключите загрузку dashicons.min.css во Frontend

Установите код запрета иконок:
Если в публичной части сайта не используется файл иконок «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. В случае обновления темы повторите установку кода
2. При нахождении в конце файла functions.php закрытия блока «?>» разместите код до него.
3. Если после установки кода сайт выдаёт ошибку — удалите код и обновите страницу (Ctrl+F5)

14. Проверьте актуальность Яндекс.Метрика

Изучите код на асинхронность:
Сервис Яндекс.Метрика с обновлением функционала актуализирует код, который необходимо размещать на сайте.
Старые версии метрики работают без использования асинхронного метода загрузки, что плохо влияет на быстродействие.

Проверьте код:
1. Найдите расположение кода Я.Метрика на сайте (обычно находится в файле footer.php, или header.php используемой темы)
2. Изучите код на наличие k.async=1
3. При отсутствии условия асинхронности обновите код, скопировав его с вашего аккаунта на сервисе Я.Метрика

Примечание:
1. В случае обновления темы повторите установку кода
2. Если после установки кода сайт выдаёт ошибку — удалите код и обновите страницу (Ctrl+F5)

15. Отключите «агрессивную проверку» обновлений

Для проверки обновлений ядра/темы/плагинов при генерации админ страницы, чтобы моментально показать вам результаты поиска новых версий, отправляются 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. Для моментальной проверки обновлений перейдите на страницу «Консоль -> Обновления»

Важно:
1. В случае обновления темы повторите установку кода
2. При нахождении в конце файла functions.php закрытия блока «?>» разместите код до него.
3. Если после установки кода сайт выдаёт ошибку — удалите код и обновите страницу (Ctrl+F5)

16. Отложенная загрузка JivoSite

Используйте код отложенной загрузки:
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;...
Примечание:
1. В случае обновления темы повторите установку кода
2. Если после установки кода сайт выдаёт ошибку — удалите код и обновите страницу (Ctrl+F5)

P.S. Если вы не используете онлайн консультант на своём сайте и не хотели бы видеть его на других проектах сети — установите в браузер блокиратор «Hello, Goodbye»

avatar
error: Контент защищён!