Сократите время ответа сервера wordpress


image
Скорость и отказоустойчивость – одни из тех факторов, что неизменно влияют на популярность вашего ресурса, ведь даже с лучшим в мире контентом медленно работающий сайт будет раздражать читателей и рано или поздно вы их потеряете. В этой статье мы будем оптимизировать самый популярный блоговый движок — WordPress, работающий на PHP. А заодно рассмотрим несколько общих моментов в оптимизации сайтов.

1 Тестируем текущую скорость

Чтобы узнать изменилось ли что-нибудь после нашей оптимизации, не помешает замерять для начала текущую скорость загрузки страниц блога, чтоб было с чем сравнивать. Есть несколько инструментов, которые помогут сделать это:

1.1 Pingdom

Pingdom проводит быстрое и наглядное тестирование скорости загрузки всех элементов на странице и представляет результаты в виде удобной диаграммы, где можно посмотреть, какие элементы сайта загружаются медленнее чем необходимо и прочие проблемные области.


image
Бенчмарк одного довольно известного ресурса.

1.2 YSlow

YSlow– плагин для Firefox, который встраивается в, пожалуй лучший плагин для веб разработчика, Firebug. Он анализирует более 20 факторов, которые влияют на скорость работы сайта и оценивает общую производительность по 100 бальной системе, а каждый отдельный элемент оценкой от A до F.
image

1.3 Количество запросов и время их выполнения

Вставив небольшой кусок PHP кода, можно вывести в футер количество запросов к БД и время, затраченное на их выполнение.

<?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds.

2 Web Hosting

Хотите верьте, хотите — нет, но веб хостинг одна из важнейших деталей, влияющих на производительность блога. Не вдаваясь в подробности, вот очень простая характеристика наиболее популярных типов хостинга, которая поможет вам примерно оценить нагрузку на сервер:

  • Shared Hosting – на одном сервере может хоститься в среднем около 100 человек;
  • VPS – на одном сервере может хоститься около 20 человек;
  • Dedicated – сервер будет использоваться только вами.

Чтоб просмотреть примерную нагрузку на сервер, залогиньтесь через ssh и введите в консоли команду top.

Это, конечно, не означает, что вы не сможете ускорить блог, работающий на виртуальном хостинге(Shared Hosting), однако стоит помнить – производительность тем выше, чем большие ресурсы мы имеем в своем распоряжении.

Не последнюю роль играет также и географическое положение сервера, потому всегда нужно примерно представлять свою целевую аудиторию. Например, если это русскоязычные пользователи – не стоит покупать американский хостинг и т.д.

3 Установка и настройка сервера

Удостоверьтесь, планируемая нагрузка соответствует мощности сервера и он сможет с ней справиться. В первую очередь это будет зависеть от объема оперативной памяти и процессора. Как правило, WordPress ставят на Apache, но много удачных решений существует и на базе других http серверов: nginx, lighttpd и т.д.

Не забудьте обновить до последней версии PHP и Apache.

3.1 Отключите неиспользуемые сервисы

Вы можете получить больше доступной оперативной памяти, отключив неиспользуемые службы и оптимизировав MySQL и Apache.

  • Удалите ClamD;
  • Настроить SpamD на использование только 1 дочернего процесса;
  • Удалите Mailman, если, конечно, вы не собираетесь запускать почтовый сервис.

3.2 MYSQL Query Cache

Поскольку стабильность и скорость WordPress довольно сильно зависит от работы БД, стоит убедиться, что настройки в my.cnf соответствуют возможностям сервера. В первую очередь следует установить настройки кэширования запросов, добавив в my.cnf следующие строки:

query_cache_type = 1
query_cache_limit = 2M
query_cache_size = 20M

Чтоб настройки вступили в силу придется перезапустить сервис MySQL сервис.

3.3 Кэш компилятора: XCache или Eaccelerator?

Кэш компилятора увеличивает производительность откомпилированных скриптов на сервере, кэшируя их – это поможет сократить время выполнения PHP скриптов. Стоит попробовать и то и другое решение, однако по результатам опытов увеличение производительности при использовании Xcache на 5% выше, чем с Eaccelerator.

3.4 Увеличьте максимальное число соединений на Apache

Увеличение максимального количества соединений в httpd.conf повысит производительность, т.к. сервер сможет обрабатывать большее количество подключений за раз. Однако, следует изменять этот параметр осторожно, дабы не исчерпать весь объем оперативной памяти и не замедлить работу сервера, потому всегда тестируйте новые настройки прежде чем запускать их в работу. Установим к примеру 150 коннектов:

max_connections = 150


Не забудьте рестартить сервис Apache, чтоб применить настройки.

4 Оптимизация кода и графики

Итак, сервер заработал и теперь настало самое время поиграть с кодом WordPress.

4.1 Отключите хотлинки

Каждый раз когда вы используете свой сервер для хранения изображений вы существенно больше используете его ресурсов. Довольно часто люди заимствуют ваши изображения, ставя хотлинки на своих серверах. Это не только занимает канал, но и создает определенную нагрузку на сервер.
Добавьте следующий код в .htaccess файл, заменив example.com на имя вашего домена, чтобы отключить использование хотлинков:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/.*$ [NC]
RewriteRule .*.(gif|jpg|png|ico)$ - [F,L]
</ifModule>

4.2 Используйте внешний хостинг для хранения изображений

Хостинг изображений на внешних серверах поможет значительно снизить нагрузку на сервер. В примере ниже вы можете видеть снижение объема используемой оперативной памяти на одном из блогов после переноса изображений на сервис Amazon S3.


image

4.3 Сжимайте java-скрипт код

Сжатие javascript довольно простая задача. Поскольку он выполняется при каждом просмотре страницы, вы можете уменьшить размер Javascript, удалив все незаполненное пространство. Вот простой инструмент, который поможет сделать это за вас — JavaScript Compressor.

4.4 Javascript в начале страницы

Часто случается так, что сайт начинает загружаться медленно или вообще останавливается, т.к. другой ресурс, с которого вызывается javascript(на пример Digg badges, Tweetmeme и т.д.), не доступен или оффлайн. Чтобы избежать этого вынесите весь javascript код в конец страницы, а то что по каким-то причинам вынести не удалось – попробуйте заключить в iFrame.

4.5 Используйте кэш браузера

Сам по себе кэш браузера, конечно не сделает ваш блог быстрее, однако поможет снизить нагрузку на сервер, кэшируя часто загружаемые объекты(стили, элементы интерфейса и т.п.).
Попробуйте вставить следующий код в .htaccess файл:

FileETag MTime Size
<ifmodule mod_expires.c


font>

4.6 Сжимайте статические данные

Вы можете уменьшить размер загружаемой страницы позволив браузеру принимать и передавать данные в сжатом виде. Это также снизит загрузку канала и количество загружаемых данных.
Следующий код в .htaccess может помочь вам в этом:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html

4.7 Используйте CDN для статических файлов

Если хранить все изображения на одном и том же домене, то браузер будет ожидать их загрузки одного за другим. Допустим на странице их у вас есть 12 штук, если вы разделите их между тремя поддоменами, они будут загружаться одновременно из трех «разных» источников вместо того, чтоб загружаться браузером по очереди из одного.


r /> Можете попробовать перенести все css & javascript файлы на files.yoursite.com, а изображения и временные файлы на static.yoursite.com. Или же просто использовать CDN(Content Delivery Network) – большая сеть серверов, расположенных по всему миру, которые позволят не только хранить ваши файлы на разных поддоменах, а значит загружать их параллельно, но и доставлять пользователю данные с самого близкого к нему сервера. Все это позволит загружать данные намного быстрее.

5 WordPress

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

5.1 Обновитесь до последней версии

Обновления до более новых версий позволяют не только устранять обнаруженные уязвимости, но и улучшают производительность. Для примера в wordpress 2.8 была существенно оптимизирована работа с БД.

5.2 Отключите Post Revisions

Во всех версиях wordpress, начиная с 2.6, редакции ваших статей каждый раз во время правки автоматически сохранялись. Это замедляет работу БД и увеличивает ее размер без особой надобности.
Чтоб отключить post revisions, добавьте следующую строку в wp-config.php:

define('WP_POST_REVISIONS', false);

Чтобы удалить сохраненные ранее ревизии текста, выполните следующий запрос в PHPmyadmin:


DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

5.3 Сократите количество запросов

Уберите ненужные запросы, чтоб ускорить генерацию страницы. Например, следующий типичный код, встречающийся во всех темах для wordpress:

<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

Мы запросто можем переписать в:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


Уже на два запроса меньше. Довольно просто, не правда ли?

habr.com

1. Как вычислить кривой плагин?

Тут все просто: сначала вырубаем СРАЗУ ВСЕ плагины и смотрим на результат:
15 — столько SQL запросов к базе.
0,937074 — за столько сгенерировалась страница.
Как видите, мало что изменилось, а это значит, что плагины не причем. Эта теория проверена, идем дальше…

2. Как проверить шаблон WordPress?

Тут действуем сначала по той же схеме, закачиваем какой-нибудь бесплатный шаблон, вставляем в него наш код и смотрим на результат.
27 — столько SQL запросов к базе.
1,170909 — за столько сгенерировалась страница.
Мда, результат тот же, значит тема не при чем, нужно рыть дальше.

3. Как проверить сайт на вирусы?

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

4. Как проверить базу данных?

У меня ушли сутки, прежде чем я решил проблему. Сразу хочу показать результат:

29 — столько SQL запросов к базе.
0,168516 — за столько сгенерировалась страница.


Видите разницу? 1,2 секунды или 0,16 секунд? Это разница в ДЕСЯТЬ РАЗ! Как мне этого удалось достичь?

Как я и предполагал, дело было в базе данных. Никакие чистильщики не помогали, и тогда я стал делать все вручную. Очень помогла ВОТ ЭТА СТАТЬЯ, не знал о таких приемах при работе с базой данных.

Первое, что я сделал, это отсортировал таблицы базы данных, чтобы увидеть, что занимает больше всего места. Получилось вот что:

Сократите время ответа сервера wordpress

Самыми большими и поэтому вызывающими подозрение были 4 таблицы, в порядке убывания:

post — в этой таблице хранятся все статьи, к ней вопросов быть не может.
options — тут хранятся все настройки и к этой таблице вопросы есть.
postmeta — тут хранятся мета описания к статьям — к ней вопросы есть.
comments — в этом разделе хранятся комментарии, к нему вопросов нет.

Сначала я взялся за таблицу POSTMETA и вычистил из нее немного мусора, в основном кэш, который оставил один плагин. Но все это не помогло. Тогда я взялся за таблицу OPTIONS.

Я установил плагин Clean Options (плагин создан ИСКЛЮЧИТЕЛЬНО для чистки ЭТОЙ таблицы), который нашел у меня более ТЫСЯЧИ осиротевших опций! Я удалил примерно 700 ненужных строк из таблицы, осталось 300, которые кажется нужны.

Сократите время ответа сервера вордпресс

Но и это не помогло, хотя операция эта нужная. Я был ужасе от того, что все плагины оставляют после себя столько мусора. Это натолкнуло меня на мысль не ставить больше плагины на основном блоге, если я не убедился, что он мне нужен. Можно создать тестовый сайт на поддомене и тренироваться на нем.

Далее я сделал так: скачал эту таблицу на компьютер и открыл в обычном текстовом редакторе (лучше для разработчиков, у меня в линукс это Geany), сделал перенос строк и сразу увидел, что занимает ОГРОМНОЕ количество места!

Как сократить время ответа от сервера?

Виновником всему был cron! Если не знаете что это, то вот для справки:

cron — демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в определённое время.

Я ничего не планировал, и я даже не знаю, какой плагин создал столько заданий! Я зашел в PHPMYADMIN и нашел в этой таблице этот раздел, затея я его безжалостно удалил! Таблица сократилась с 3,5 мегабайт до 168 килобайт! После этого сайт стал летать как ошпаренный!

Я не пользуюсь запланированными заданиями, и теперь буду думать, как отключить этот cron навсегда, иначе через время он может мне опять загадить базу данных таким чудовищным образом.

Если вы знаете, почему у меня все так вышло и как этого избежать в будущем, то охотно послушаю экспертный совет. А в целом я ОЧЕНЬ рад, так как сутки у меня были мысли только об этом. Осталось только все это сделать на других сайтах, вдруг и там есть эта проблема, пусть и не в таком масштабе? И напоследок похвастаюсь, плагин кэширования отключен:

скорость загрузки сайта

1,7 секунды — это кажется круто?

Как найти мусор от плагинов?

Нашел еще такой интересный плагин — Plugins Garbage Collector. Он сканирует базу данных и ищет таблицы, которые не принадлежат самому wordpress:

Plugins Garbage Collector

У меня нашлись таблицы, которые уже не используются плагинами, так как я их удалил — в топку! Так тоже можно немного очистить базу данных от мусора.

Как уменьшить время отклика от сервера?

Все это мне очень помогло ускорить сайт, но все же Google Speed сигнализировал мне, что время отклика от сервера очень большое. И виноват в этом не сам сам сервер, так как простые html документы загружаются без всяких задержек, а движок сайта WordPress, который как не ускоряй ракетой не станет. Что же делать?

Проблема решилась легко — установкой на сайт плагином для кэширования и установка плагина, который сжимает стили и скрипты. Но не все было так просто на самом деле, так как далеко не все плагины для кэширования страниц работали так как нужно.

Одни не работали совсем, хотя кэш создавали. Но если некоторые и делали в этом отношении все хорошо, была другая проблема — мобильная версия сайта. Если в плагине кэширования нет разграничения между мобильным и обычным кэшем, то вы столкнетесь с такой проблемой.

Если кто-то первый сначала зашел на эту статью с телефона, то в кэше сохраниться мобильная версия страницы. А если потом на нее же зайдет другой человек с десктопа, то сайт ему покажет мобильную версию, что будет выглядеть очень коряво.

Из всех плагинов, которые имели разделения между мобильным и обычным кэшем, я нашел лишь один — HYPER CACHE.

hyper-cache

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

pagespeed-insights-vremya-otklika-ot-servera

До 100/100 в Google Speed мне осталось совсем немного и уверен я достигну этого результата, так как почти все уже сделано, осталось совсем немного…

zmoe.ru

1. Используйте надежный фреймворк/тему

За каждым  WordPress-сайтом лежит тема или фреймворк, и это иногда может приводить к проблемам. Каждая тема написана по-разному, и потому одни зачастую темы лучше, чем другие. Дефолтные WordPress-темы типа Twenty Fifteen, очень быстрые, потому что легковесные.

Будьте осторожны, когда покупаете темы на таких мега популярных сайтах, как ThemeForest и  Creative Market. Несмотря на то, что там много великолепных тем, вы должны понимать, что разработчики часто добавляете функции просто, чтоб увеличить продажи. Так что главное — найти правильных разработчиков. И именно о таких мы не раз писали на страницах этого сайта.

Так же, такие легкие фреймворки, как Thesis Theme framework и Genesis также известны тем, что на их основе разрабатываются быстрые и хорошо написанные темы.

2. Использование кэширования

Кэширование – это еще один важный фактор, который стоит учитывать, если мы хотим разогнать WordPress. Кэширование позволяет хранить  ваши страницы и записи в виде статичных файлов, которые затем доставляются вашим посетителям, минимизируя процесс загрузки на вашем сервере. Вы можете использовать кэширование, используя WordPress плагины кэширования и тем самым внедрив кэширование браузера и кэширование со стороны сервера.

Плагины кэширования

Вот несколько лучших бесплатных и платных плагинов кэширования:

Cache Enabler
W3 Total Cache
WP Super Cache
WP Rocket

Установка и правильная настройка плагина кэширования может привести к увеличению производительности в 200-300%!

Обход  PHP для кэшируемых страниц

Ниже представлена более продвинутая конфигурация Nginx обхода PHP для кэширования страниц. Этот пример оптимизирован для плагина Cache Enabler.

Пример конфигурации Nginx

set $cache_path $request_uri;    # bypass cache if query string not empty  if ( $query_string ) {   set $cache_path 'nocache';  }    # bypass cache for POST requests  if ( $request_method = POST ) {   set $cache_path 'nocache';  }    # bypass cache for admin area  if ( $request_uri ~ /wp-admin/ ) {   set $cache_path 'nocache';  }    # bypass cache for logged in users  if ( $http_cookie ~ (wp-postpass|wordpress_logged_in|comment_author)_ ) {   set $cache_path 'nocache';  }    location / {   try_files /wp-content/cache/cache-enabler/${http_host}${cache_path}index.html $uri $uri/ /index.php?$args;  }

Кэширование браузера – добавьте заголовки  Expires к WordPress

Вы также можете добавить кэширование браузера, добавив заголовки expires. Заголовки Expires говорят браузеру, должны  kb они запросить определенный файл с сервера или они должны захватить их из кэша браузера. Добавляя их, вы можете уменьшить количество HTTP-запросов, которые им нужны. Некоторые плагины кэширования для  WordPress позволяют добавить их, но вы также можете просто добавить код в ваш файл  .htaccess 

<IfModule mod_expires.c>  # Enable expirations  ExpiresActive On   # Default directive  ExpiresDefault "access plus 1 month"  # My favicon  ExpiresByType image/x-icon "access plus 1 year"  # Images  ExpiresByType image/gif "access plus 1 month"  ExpiresByType image/png "access plus 1 month"  ExpiresByType image/jpg "access plus 1 month"  ExpiresByType image/jpeg "access plus 1 month"  # CSS  ExpiresByType text/css "access plus 1 month"  # Javascript  ExpiresByType application/javascript "access plus 1 year"  </IfModule>

Кэширование сервера

Помимо плагинов кэширования для  WordPress и кэширования браузера вы можете использовать преимущества кэширования со стороны сервера. Такой вид кэширования обычно используется на сайтах с большим количеством трафика. Кэширование с Varnish  может быть очень мощным, если его скомбинировать с плагином кэширования и CDN.

Prefetch обычно используемых доменов

Prefetching – это нечто сходное кэшированию в том смысле, что вы тоже говорите браузеру, типа Chrome, что нужно найти  DNS-настройки перед тем, как они на самом деле понадобятся.  Благодаря этому «прошиваются» страницы и запросы любых prefetched-доменов, которые еще не кэшируются, и они начинают работать быстрее.

Вы можете использовать  prefetch для доменов в  WordPress, добавив синтаксис домена в ваш файл header.php между тегами   <head> </head> . Этот процесс не блокируются и будет включаться только тогда, когда возможно. Вот распространенные примеры.

Prefetch Google шрифты:

<link rel="dns-prefetch" href="//fonts.googleapis.com">

Prefetch Google код  (jQuery)

<link rel="dns-prefetch" href="//ajax.googleapis.com">

Prefetch Google Analytics

<link rel="dns-prefetch" href="//www.google-analytics.com">

Удаляем  Query Strings из статичных ресурсов

Также можно извлечь пользу из удаления query strings из ваших статичных ресурсов, так как они могут приводить к возникновению проблем с прокси кэша и  CDN. В  WordPress для этого есть парочка опций.

Отредактируйте ваш файл  functions.php, чтоб включить туда функцию, которая удалит query strings.

function _remove_script_version( $src ){  $parts = explode( '?ver', $src );  return $parts[0];  }  add_filter( 'script_loader_src', '_remove_script_version', 15, 1 );  add_filter( 'style_loader_src', '_remove_script_version', 15, 1 );

Если вы используете плагин кэширования типа W3 Total Cache, то у вас есть опция, которая предотвращает создание query strings. Есть бесплатные  WordPress-плагины, которые также могут удалить query strings, и это плагины Query Strings Remover и Remove Query Strings From Static Resources.

3. Внедрение сети доставки содержимого (Content Delivery Network)

Неважно насколько крупная у вас WordPress-инсталляция или, как много трафика вы получаете, вы все равно выиграете от внедрения сети доставки содержимого  (CDN). CDN берет все ваши файлы  (CSS, Javascript, картинки) и доставляет их на сервер ближе к посетителю, что уменьшает время загрузки. Кроме скоростного бонуса сеть доставки содержимого также может создать положительное впечатление от вашего сайта, улучшить его ранжирование, увеличить время, которое ваши посетители проводят на сайте, улучшить  конверсию и даже SEO.

Загрузка всех ассетов из WordPress CDN

Убедитесь в том, что вы загружаете даже самые мелкие файлы, типа фавикона, из вашей CDN. Если загружено все из CDN, то создается одно единое соединение. Чтобы твикнуть ваш фавикон, просто киньте его в корневой каталог вашей инсталляции WordPress с помощью  FTP, а затем добавить следующее в ваш header.php между тегами head.

<link rel="shortcut icon" href="https://cdn.domain.com/favicon.ico" type="image/x-icon" />

Как вы видите из примера ниже,  загружено 100% ваших ассетов из CDN.

Сократите время ответа сервера wordpress

4. Оптимизация  базы данных WordPress

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

Отключение и ограничение количества версий постов в WordPress

WordPress создает множество версий постов, когда вы пишите контент. Если вы не очень аккуратны, то в базе данных у вас могут скопиться тысячи ненужных версий.

Сократите время ответа сервера wordpress

Чтоб решить эту проблему, вы можете или отключить создание версий постов вообще, или ограничить их количество.

Отключение создания версий WordPress-постов

Чтоб отключить создание версии постов в WordPress, вам нужно добавить следующий код в ваш файл wp-config.php. Таким образом вы сначала измените интервал авто сохранения по умолчанию с  60 секунд на 5 минут, а затем и вовсе отключите создание  версий записей. По умолчанию останется одно авто сохранение на пост.

define('AUTOSAVE_INTERVAL', 300); // seconds  define('WP_POST_REVISIONS', false);

Также есть бесплатный маленький плагин, который называется Disable Post Revision. Он  делает тоже самое без необходимости копаться в коде.

Ограничение количества сохраненных версий WordPress-постов

Чтоб ограничить количество создаваемых версий  WordPress-постов, вам нужно добавить следующий код в ваш файл  wp-config.php. Таким образом вы измените интервал авто сохранения по умолчанию с  60 секунд на 5 минут и ограничите количество создаваемых версий до трех. Впрочем, вы можете указать любое желаемое количество сохраняемых версий.

define('AUTOSAVE_INTERVAL', 300); // seconds  define('WP_POST_REVISIONS', 3);

Удаление старых версий постов из вашей базы данных

После того, как вы отключили или лимитировали количество создаваемых версий записей, вам нужно будет подчистить все, удалив старые версии. Для этого мы рекомендуем временно установить бесплатный плагин WP-Optimize.

Сократите время ответа сервера wordpress

С помощью этого плагина вы можете удалить все старые версии, сохраненные черновики, спам-комментарии, неодобренные комментарии, пингбэки и трекбэки. Самая свежая WP-Optimize также позволяет включить авто очистку по заданному заранее графику.

Предупреждение об ограничении WordPress в 100 сраниц

Вы должны знать, что WordPress не создан для того, чтоб работать более, чем со  100 страницами. Если у вас накопится  более 100 страниц, то у вас начнутся проблемы с памятью, и вы заметите, что работа сайта существенно затормозилась со стороны бэкенда. Ваш фронтенд при этом не замедлится.

Страницы имеют свое иерархическое древо. Так что все, что касается страниц, заканчивается загрузкой всего иерархического древа страниц в зоне  бэкенда. Это нужно, чтоб установить, как эта страница связана с другими. Когда мы имеет дело с записями, то здесь нет связи с другими записями, и присутствуют  только данные связанной записи, так что здесь не нужно будет столько всего загружать. Помните, что по своей сути WordPress – это блоговая платформа.

Решение? Вам нужно начать использовать кастомные типы записей. Вы можете использовать бесплатный плагин типа Post Type Switcher, если у вас много страниц, и вы хотите конвертировать их в кастомные типы записей.

5. Оптимизируйте картинки, используя компрессию без потерь

Картинки в среднем составляют 56 процентов веса страницы стандартного сайта. Так что оптимизация и компрессия картинок должна занять важное место в вашем списке приоритетов. Компрессия без потерь –это метод, который позволяет сжимать картинки, уменьшив их размер, но не затронув их качество.

Optimus – это плагин, который нацелен именно на компрессию картинок без потерь: он может убрать до  70% веса изображений. Вы можете установить его и автоматически сжимать ваши картинки во время их загрузки. Почитать об оптимизации картинок можно еще вот здесь.

6. Компрессия Gzip

Gzip – это еще один вид компрессии, который сжимает веб-страницы, CSS и javascript на уровне сервера перед тем, как послать их в браузер.

Apache

Вы можете включить компрессию, добавив следующий код в ваш файл .htaccess.

<IfModule mod_deflate.c>   # Compress HTML, CSS, JavaScript, Text, XML and fonts   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/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 image/svg+xml   AddOutputFilterByType DEFLATE image/x-icon   AddOutputFilterByType DEFLATE text/css   AddOutputFilterByType DEFLATE text/html   AddOutputFilterByType DEFLATE text/javascript   AddOutputFilterByType DEFLATE text/plain   AddOutputFilterByType DEFLATE text/xml     # Remove browser bugs (only needed for really old browsers)   BrowserMatch ^Mozilla/4 gzip-only-text/html   BrowserMatch ^Mozilla/4.0[678] no-gzip   BrowserMatch bMSIE !no-gzip !gzip-only-text/html   Header append Vary User-Agent  </IfModule>

Nginx

Вы можете включить конверсию, добавив следующее в ваш файл  nginx.conf .

gzip on;  gzip_comp_level 2;  gzip_http_version 1.0;  gzip_proxied any;  gzip_min_length 1100;  gzip_buffers 16 8k;  gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;  gzip_disable "MSIE [1-6].(?!.*SV1)";  gzip_vary on;

7. Сократите количество WordPress-плагинов

Очень важно придерживаться необходимого количества плагинов, установленных на вашем сайте, так как слишком большое и бездумное количество плагинов часто ведет к замедлению работы сайта. Но перед тем, как тупо удалять плагины, попытайтесь определить, какие именно тормозят ваш сайт (если тормозят). После того, как вы проведете такой анализ, решите, действительно ли вам так нужны проблемные плагины, или можно добиться тех же результатов другими способами. Всегда помните о том, что один «кривой» или давно не обновляемый плагин может стать проблемой гораздо большей чем несколько десятков исправно работающих.

P3 (Plugin Performance Profiler)

P3 – это бесплатный  WordPress-плагин, который поможет вам увидеть, какие плагины затормаживают работу вашего сайта, а именно он показывает:

  • Время загрузки каждого плагина
  • Общее количество активных плагинов и время загрузки страницы
  • Влияние каждого  плагина на скорость загрузки страницы
  • Количество  MySQL запросов (на уровне страницы)
  • Сравнение сканирований

Заметим: сейчас плагин не совместим с PHP7.

WP Performance Profiler

WP performance profiler – это  недорогой (всего 9$) премиальный WordPress-плагин, созданный специально для того, чтоб вы могли измерить производительность ваших WordPress-плагинов на более продвинутом уровне, чем это делает P3.

Сократите время ответа сервера wordpress

И конечно же — после того, как анализ проведем, плагины-измерители можно удалить или просто отключить.

8. Оптимизируйте производительность Web-шрифтов

57% веб-сайтов сейчас использует кастомные шрифты, и это 850% прирост с 2011. Мы заметили, что важно использовать только те шрифты, которые действительно нужны и такие форматы, как WOFF и WOFF2.

В наших тестах  Google шрифты показали себя хорошо, так как они используют собственный CDN и придерживаются форматов WOFF. Open Sans стал самым быстрым из 10 самых популярных шрифтов. Если вы хотите ускориться и при этом использовать Google-шрифты, то лучшая комбинация для WordPress это  Open Sans и веб-безопасный  Arial.

Сократите время ответа сервера wordpress

Важно отметить, что разница между Google-шрифтом и веб-безопасным шрифтом составляет  200 миллисекунды. Она складывается из времени загрузки шрифта и дополнительного запроса HTTP к серверам  Google.

Сократите время ответа сервера wordpress

Также вы можете  перенести ваши Google Шрифты на собственный  CDN.

Вы также можете шагнуть еще дальше в сторону base64, закодировав ваши шрифты в файл CSS, а затем поместив их в  localStorage. Нативный кэш браузера обновляется быстро, особенно, на мобильных девайсах. Так что если вы сохранились на localStorage, то файлы кэшируется очень быстро.

Мы рекомендуем вам обратить внимание на  localFont tool:  вы можете быстро перетащить ваши  WOFF-шрифты в этот инструмент, и он закодирует их в base64, а затем даст вам файлы CSS и Javascript, чтоб использовать их на вашем  WordPress-сайте.

Сократите время ответа сервера wordpress

9. Оптимизация иконок  Font Awesome

Когда дело касается популярного Font Awesome, то у нас есть парочка опций, которые помогут  ускорить эти иконки. Если ваша тема уже включает Font Awesome, то вам нужно будет немного поработать над ней.

Вариант  1 – используйте Font Awesome CDN на хостинге с открытым исходным кодом

Первый метод – это версия Font Awesome CDN на хостинге. Этот проект находится на хостинге от KeyCDN, и вы сможете воспользоваться преимуществом более чем  25-ти серверов, на которых есть бесплатные  HTTP/2 и CORS. Просто используйте этот код, вклеив  его в файл header.php вашего  WordPress  между тегами <head>.

https://opensource.keycdn.com/fontawesome/4.6.1/font-awesome.min.css

Сократите время ответа сервера wordpress

Затем вы сможете использовать иконки  Font Awesome везде на вашем WordPress –сайте с помощью тега <i. Вот примеры использования  CSS префикса  <fa> и названия иконки.

<i class="fa fa-database fa-lg"></i>

Вариант 2 – Хостингование Font Awesome на вашем собственном  CDN (рекомендуется)

Второй вариант, который мы рекомендуем, заключается в использовании вашего собственного CDN для их хостингования. Так как  загрузка будет производится с помощью  того же соединения, которое использует  другие ассеты, то  одним  DNS-поиском будет меньше.

Первое, что нужно сделать, это убедится в том, что ваш файл Font Awesome загружен согласно первоначальному CSS-пути. В случае этого варианта, пока вы используете файл Font Awesome CSS, как загружаемый из  CDN, это будет файл шрифтов. Вот пример того, как это используется на странице:

Сократите время ответа сервера wordpress

Ссылка на ваш файл  Font Awesome, использующий CDN URL, должна выглядеть как  сниппет  <link>, отображенный ниже.

<link href="https://cdn.keycdn.com/css/font-awesome-4.4.0.min.css" rel="stylesheet">

Вот и все, теперь ваши иконки  Font Awesome загружаются супербыстро!

10. «Лениво» загружающиеся картинки, видео и  Disqus

Ленивая загрузка – это такой концепт, который предполагает отсроченную загрузку контента, подгружая только ту часть, которая видна пользователю. В  WordPress это обычно означает то, что объект не загрузится, пока пользователь не прокрутит страницу вниз или  пока не использует событие on-click. Вы можете загрузить таким образом любой контент, начиная  от картинок и заканчивая  видео и даже системой комментирования Disqus.

Ленивая загрузка изображений

Для ленивой загрузки картинок есть хороший бесплатный плагин под названием BJ Lazy Load. Этот плагин заменяет все изображения постов, миниатюры, граватары и айфреймы контента вместилищами картинок и загружает контент, по мере приближения к окну браузера. Также он работает с текстовыми виджетами. Если вы используете плагин  кэширования WP Rocket, то можете воспользоваться его опцией ленивой загрузки.

Ленивая загрузка видео

Для ленивой загрузки ваших видео есть бесплатный плагин, который называется Lazy Load for Videos. Он заменяет видео с Youtube и Vimeo кликабельными привью-картинками.

Ленивая загрузка Disqus

Disqus – это великолепная система комментирования, которая отсекает практически  99% спама. Но  дефолтный плагин  Disqus создает  10+ HTTP запросов, которые неплохо тормозят ваш сайт. К счастью есть плагин Disqus Conditional Load, который отсекает все эти HTTP-запросы первоначальной загрузки.  Теперь этот плагин  дружествен к  SEO, а это значит, что Google будет индексировать ваши комментарии.

11. Минификация  и объединение   CSS и Javascript

Когда мы говорим о скорости загрузки  WordPress-сайта, минификация и объединение файлов могут сыграть здесь важную роль.

Минификация

Минификация ресурсов означает удаление ненужных символов из ваших файлов HTML, Javascript и CSS. Удаляются следующие не нужные для загрузки файлов символы:

  • Пробельные символы
  • Знаки полной строки
  • Комментарии
  • Разделители

Это позволит ускорить загрузку сайта, так как снижается количество кода, который требует ответа от сервера.

Объединение

Объединение – это процесс комбинирования ваших файлов CSS и Javascript в один файл, целью которого является снижение количества HTTP запросов. Иногда можно даже снизить время загрузки файлов. В зависимости от сайта можно ускорить загрузку страниц, применив параллельные  загрузки. Так что тут нужно тестировать все способы, чтоб узнать, что именно лучше сработает для вашего сайта.

Вы можете использовать WordPress плагины для минификации и объединения вашего кода.  В WP Rocket, например, эти  опции присутствуют  в основной вкладке.

Большинство плагнов кэширования сейчас предлагают эти опции, но также есть другие бесплатные легковесные решения: Better WordPress Minify и Autoptimize. Также, когда мы говорим о позиционировании CSS иJavascript в WordPress, то лучше всего поместить  CSS наверх, а  javascript вниз. Заметим: если мы говорим об объединении  HTTP/2, то сейчас оно не так важно, как раньше.

12. Уменьшение количества  Misc HTTP запросов

Нам очень важно уменьшить количество HTTP-запроcoв, которые производит  WordPress. Сейчас мы решим проблему граватара и лишних запросов, которые требуются для загрузки emoji

Граватары

Если вы используете родную систему комментирования WordPress, то она создает отдельные HTTP-запросы  для каждого граватара. Если у вас много комментариев, то это может вылиться в тонны лишних запросов и ненужные редиректы, что мы и можем наблюдать  в примере ниже.

Сократите время ответа сервера wordpress

Вот вам несколько вариантов решения проблемы

Решение 1 – Отключить пользовательские граватары

Не идеальное решение, но оно сработает, если для вас реально важна скорость загрузки сайта.

Чтоб сделать это, установите бесплатный плагин WP User Avatar. А затем в его меню кликните “Disable Gravatar and use only local avatars.” Затем выберете дефолтный аватар

Решение  2 – Disqus быстрее

Второй вариант заключается в ленивой загрузки Disqus. Это может показаться странным, так как добавление файла javascript, плагина и внешнего призыва обычно выливается в  лишнее время загрузки. Но  Disqus все-таки работает быстрее благодаря уменьшенному количеству HTTP запросов.

Отключение Emoji

В WordPress 4.2 появилась дополнительная поддержка emoji. И, к сожалению, это означает появление дополнительного файла  javascript wp-emoji-release.min.js?ver=4.3.1 в «шапке». Благодаря этому создается ненужный дополнительный HTTP-запрос.

Отключаем emoji, чтоб избавиться от дополнительного  HTTP-запроса.

Сначала откроем настройки Публикации в WordPress и убедимся в том, что убрана галочка с  “преобразовывать смайлики” в разделе «форматирование».

Сократите время ответа сервера wordpress

Способ 1 – WordPress-плагин

Установите бесплатный плагин Disable Emojis. Этот плагин отключает новую функциональность emoji в  WordPress 4.2.

Способ 2 – WordPress функция

Если вы не хотите устанавливать лишний плагин, просто возьмите код из плагина, который описан выше и вклейте его в нижнюю часть файла  functions.php.

/**   * Disable the emoji's   */  function disable_emojis() {  	remove_action( 'wp_head', 'print_emoji_detection_script', 7 );  	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );  	remove_action( 'wp_print_styles', 'print_emoji_styles' );  	remove_action( 'admin_print_styles', 'print_emoji_styles' );	  	remove_filter( 'the_content_feed', 'wp_staticize_emoji' );  	remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );	  	remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );  	add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );  }  add_action( 'init', 'disable_emojis' );    /**   * Filter function used to remove the tinymce emoji plugin.   *    * @param array $plugins    * @return array Difference betwen the two arrays   */  function disable_emojis_tinymce( $plugins ) {  	if ( is_array( $plugins ) ) {  		return array_diff( $plugins, array( 'wpemoji' ) );  	} else {  		return array();  	}  }

Отключение скриптов на базе уровня страниц

Обычно мы пытаемся избавиться от лишних плагинов, но есть плагин, называемый Gonzalez, который позволяет вам отключить ненужные скрипты и не дать им загрузиться на страницах всего сайта. Плагин не бесплатный, но стоит своих денег, если вы хотите подбавить немного газку. Например, Contact Form 7 – это великолепный WordPress-плагин, но по умолчанию он загружает свой скрипт на каждой странице. А с помощью этого плагина это можно легко отключить, чтоб плагин загружался только на контактной странице.

Сократите время ответа сервера wordpress

Отключение  Embeds

Начиная с  WordPress 4.4, происходит загрузка нового скрипта wp-embed.min.js , который позволяет вам просто вклеивать видео, картинки, твиты и т.д. К примеру, WordPress автоматически превратит URL в  YouTube-вклейку и предоставит живое привью в визуальном редакторе. Многие люди эту функцию не используют, тем более, что мы всегда можете захватить код для вклейки с YouTube или Twitter. Большая проблема этой функции заключается в том, что она загружает скрипт на каждой странице. Давайте посмотрим, как можно отключить этот скрипт.

Вариант 1 – WordPress-плагин

Установите  WordPress-плагин Disable Embeds. Вот что делает этот плагин:

  • Не позволяет другим вклеивать что-то в ваш сайт
  • Не позволяет вам вклеивать что-то с подозрительных сайтов
  • Отключает все JavaScript, родственные этой функции

Вариант  2 – Функция WordPress

Или вы можете кинуть следующий кусок кода  в нижнюю часть вашего файла functions.php .

/ Remove WP embed script  function speed_stop_loading_wp_embed() {  if (!is_admin()) {  wp_deregister_script('wp-embed');  }  }  add_action('init', 'speed_stop_loading_wp_embed');

Отключение комментариев

Когда бы вы не использовали древовидные комментарии в WordPress, скрипт comment-reply.min.js включается на каждой странице и записи. Если вы хотите отключить комментарии или используете сторонние системы комментирования типа  Disqus, то вам не нужно загружать этот скрипт на каждой странице.

Сократите время ответа сервера wordpress

Чтоб отключить этот скрипт, вы можете кинуть следующий код в нижнюю часть вашего файла functions.php .

// Remove comment-reply.min.js from footer  function comments_clean_header_hook(){   wp_deregister_script( 'comment-reply' );   }  add_action('init','comments_clean_header_hook');

13. Отключение хотлинкинга

Хотлинкинг –это включение в веб-страницу изображений или других объектов  с чужого сервера. Это значит, что когда кто-то посещает свой сайт, то изображения загружаются с вашего сервера, скрадывая вашу пропускную способность. Вы можете отключить хотлинкинг,  добавив данный код в ваш файл .htaccess , не забыв  вписав туда ваш домен.

RewriteEngine on  RewriteCond %{HTTP_REFERER} !^$  RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yourdomain.com [NC]  RewriteRule .(jpg|jpeg|png|gif)$ – [NC,F,L]

14. Отключение пингбэков и трекбэков

Пингбэки и трекбэки теперь скорее наследие прошлого и могут замедлять загрузку страниц. С помощью Ahrefs, Google alerts и других мониторинговых инструментов, вы можете с легкостью видеть чужие ссылки на ваш сайт.

Вы можете отключить пингбэки и трекбэки в секции «Обсуждение» в WordPress. Заметим: применяется только к новым записям.

Сократите время ответа сервера wordpress

Чтоб отключить пингбэки старых записей, вы можете использовать массовое редактирование записей, а для пингов включить “Do Not Allow.” (Запретить)

15. Определите габариты картинок

Большинство из вас, вероятно, видело следующую рекомендацию от Google Pagespeed:

…Предположение по оптимизации: “Сжав и изменив … вы сможете сохранить 5.8 KB (51%).”

Эта рекомендация говорит о том, что размеры изображения были изменены браузером. Например, возможно, вы загрузили картинку шириной 500px, но ширина колонки, в которую оно должно быть помещено, всего  400px. В результате, благодаря CSS, размер картинки был уменьшен до 400px, чтоб изображение соответствовало колонке. Это может стать проблемой для большого количества тем, так как разработчики пересматривают размеры изображений, используя  CSS.

Лучше всего загружать картинки в WordPress, используя правильные параметры изначально. Иногда для этого нужно подрезать картинки в  Photoshop, Paint или Gimp, перед тем, как вы загрузите их на ваш сайт.

16. Решаем проблему медленного  admin-ajax.php

In WordPress 3.6 был представлен  WordPress Heartbeat API, который позволяет WordPress устанавливать связь между браузером и сервером. WordPress Heartbeat API использует  admin-ajax.php, чтоб осуществлять  AJAX-обращения из веб-браузера. Вы, вероятно, можете наблюдать  это во время проведения скоростного теста. Это может стать причиной активного использования CPU и возникновения множества PHP-обращений. К примеру, если вы оставили админку открытой, то запросы POSTбудут непрестанно посылаться к этому файлу на регулярной основе.

Есть бесплатный плагин для  WordPress, который называется heartbeat control и позволяет контролировать то, как часто используется   WordPress heartbeat API.

Сократите время ответа сервера wordpress

Заметим: есть много сторонних разработчиков, которые сейчас используют этот файл. Если вы заметили задержки, это может быть связано с тем, что плагин использует admin-ajax.php. Xтоб разобраться в этом, вы можете прогнать ваш сайт через инструмент тестирования скорости, определить, где находится  обращение   admin-ajax.php и открыть данные записи.

Сократите время ответа сервера wordpress

Затем вы можете сказать по названию “action” какой плагин его использует. В этом примере у нас “get_shares_count”, что указывает на социальный плагин с выключенным кэшированием.  Если включить кэширование, то использование admin-ajax.php прекращается.

Сократите время ответа сервера wordpress

17. Настройка  MySQL

Оптимизация MySQL также очень важна. К сожалению, она очень зависит от конкретного окружения и вашей установки, так что мы не можем указать вам на верную для вас конфигурацию.  Файл с конфигурацией MySQL/MariaDB обычно находится в  /etc/my.cnf. Вот, вам некоторые настройки, на которые надо обратить внимание:

  • tmp_table_size
  • query_cache_type
  • query_cache_size
  • query_cache_size
  • join_buffer_size
  • max_heap_table_size

Очень полезный инструмент – это скрипт MySQL Tuner. Он доступен только для чтения, и не делает каких-либо изменений в настройках. Он позволяет вам обозреть производительность сервера и дает некоторые базовые рекомендации, которые должны помочь улучшить ситуацию. Вот еще несколько инструментов, которые вы также можете использовать:

MySQL tuning primer script
phpMyAdmin

wpnice.ru

Что такое TTFB?

TTFB (Time To First Byte) — время до получения первого байта веб-страницы после отправки запроса со стороны клиента. Чем меньше этот показатель, тем быстрее браузер начнет загружать страницу.

Кстати, специалисты MOZ провели исследование о связи TTFB и позиции страницы в выдаче. Главный график в статье:

Специалисты MOZ провели исследование о корреляции TTFB и позицией страницы в выдаче

По рекомендациям Google, показатель TTFB не должен превышать 200 мс, а в идеале должен быть не более 50 мс. Если время ответа больше, потребуется определить причину и устранить её.

Как проверить TTFB?

Использовать отладчик в браузере

Для проверки TTFB можно использовать отладчик браузера. Например, в Google Chrome и Mozilla Firefox отладчик запускается комбинацией клавиш «Ctrl+Shift+I». После этого необходимо выбрать вкладку «Network» (Сеть), перезагрузить страницу и отфильтровать ресурсы по типу HTML (Doc). Далее нужно выбрать текущую загруженную страницу и во вкладке «Timing» в строке «Waiting» будет указано время ответа сервера.

Далее нужно выбрать текущую загруженную страницу и во вкладке «Timing» в строке «Waiting» будет указано время ответа сервера

Получить данные из Google Analytics

Необходимо перейти по пути «Поведение» — «Скорость загрузки сайта» — «Обзор». Далее в блоке «Среднее время ответа сервера (сек.)» будет указан TTFB за выбранный промежуток времени.

Далее в блоке «Среднее время ответа сервера (сек.)» будет указан TTFB за выбранный промежуток времени

Использовать PageSpeed Insights

Также можно использовать инструмент PageSpeed Insights. Введите URL веб-страницы и запустите анализ. После завершения анализа при наличии проблемы с TTFB вы сможете в увидеть это показатель в блоке «Сократите время от сервера».

Также можно использовать инструмент PageSpeed Insights

Использовать Netpeak Spider

Netpeak Spider — десктопный краулер для комплексного SEO-аудита всего сайта. Чтобы узнать время ответа сервера с помощью этого инструмента, вставьте URL в адресную строку, запустите сканирование (кнопка «Старт») и выберите столбец «Время ответа сервера».

Netpeak Spider — десктопный краулер для комплексного SEO-аудита всего сайта

Кстати, если TTFB страницы составит более 500 мс, Netpeak Spider покажет ошибку средней степени критичности. Все такие страницы можно удобно отфильтровать после сканирования — просто кликните на искомую ошибку в правой панели:

Все такие страницы можно удобно отфильтровать после сканирования — просто кликните на искомую ошибку в правой панели

Использовать сторонние сервисы

Простой и удобный инструмент — Webpagetest. Узнать значение TTFB можно в колонке «First Byte»:

Простой и удобный инструмент — Webpagetest

При использовании стороннего ресурса либо прокси загрузка сайта происходит с другого сервера, поэтому результаты могут сильно отличаться — многое зависит от удаленности расположения сервера, с которого происходит загрузка, от сервера, на который проводится загрузка данных.

Проверяйте TTFB не только на главной странице, но и на страницах категорий, карточках товаров. Время ответа может отличаться на разных типах страниц.

Что может быть причиной большого TTFB?

На время ответа сервера плохо влияет:

  • медленная работа с базой данных;
  • нехватка ресурсов (слабый процессор или недостаточный объем оперативной памяти);
  • неправильная конфигурация сервера;
  • отсутствие кэширования.

Для определения точной причины необходима помощь опытного программиста и системного администратора.

Как уменьшить время ответа сервера?

Оптимизировать работу с базой данных

При формировании страниц сервер каждый раз обращается к базе данных, чтобы получить необходимую информацию. Каждый запрос занимает определенное время, и чем больше запросов, тем больше общее время генерации страницы.

Например, при формировании блока «с этим товаром также покупают» выполняются следующие запросы:

  1. Определить текущий товар.
  2. Определить количество добавлений текущего товара в корзину.
  3. Определить товар, который добавлялся вместе с текущим в корзину.
  4. Исключить незавершенные заказы.
  5. Сформировать список наиболее часто покупаемых товаров вместе с представленным.

Чем больше товаров и совершенных заказов на сайте — тем больше необходимо времени на формирование ответа. Чтобы уменьшить количество запросов к базе данных, можно хранить уже сформированный ответ в кэше — так вместо пяти запросов будет выполнен всего один.

Эту задачу необходимо делегировать команде опытных программистов, которые смогут провести отладку и обнаружить самые «тяжелые» запросы и оптимизировать их.

Переехать на более производительный сервер

Причиной долгого ответа сервера может быть недостаток производительности. Слабый процессор или малый объем оперативной памяти приводят к медленной работе или вовсе «падению» сайта, поэтому необходимо всегда оставлять потенциал для непредвиденных скачков нагрузки.

Не стоит размещаться на бесплатных хостингах, либо на хостингах с ограниченными возможностями. Позаботьтесь о будущем и используйте VPS либо выделенные серверы — это лучшее решение для масштабируемых проектов.

Использовать акселераторы PHP

Каждый раз при загрузке страницы сервер обрабатывает PHP-файлы, но часто при каждой загрузке выполняется один и тот же участок кода. Акселераторы PHP позволяют значительно уменьшить TTFB путем предварительной компиляции PHP-кода. Это уменьшит нагрузку на процессор, но потребует большего объема оперативной памяти.

Популярные акселераторы:

  • Alternative PHP Cache (APC);
  • eAccelerator;
  • PhpExpress;
  • Windows Cache Extension for PHP;
  • XCache;
  • Zend OPcache.

Использовать серверное кэширование

При отсутствии кэширования страниц сервер генерирует запрашиваемую страницу при каждом обращении пользователя. Если кэшировать страницу целиком, при последующем обращении пользователя к файлу сервер не будет генерировать страницу заново, а отдаст пользователю уже сгенерированную страницу.

На тестовом сайте я настроил серверное кэширование страниц — время ответа сервера уменьшилось в десять раз.

TTFB с отключенным кэшированием:

TTFB с отключенным кэшированием

TTFB с включенным кэшированием:

TTFB с включенным кэшированием

Вывод

Работайте над сокращением времени ответа сервера и не экономьте на производительности процессоров. Если ваш TTFB больше 200 мс, обязательно:

  • оптимизируйте работу с базой данных;
  • используйте более производительный сервер;
  • используйте акселераторы PHP;
  • настройте серверное кэширование страниц.

В результате можно уменьшить время ответа сервера в 5-10 раз.

Читайте также, как ускорить сайт с помощью CDN-сервиса.

netpeak.net


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.