Сократите время ответа сервера - как решить проблему?

Регистрация доменов
Домен RU - 99 руб
Домен РФ - 99 руб
www.

Недавно я описал процесс оптимизации скриптов и стилей на своих сайтах, получилось все хорошо, но вот одна большая проблема осталась - Сократите время ответа сервера, пишет мне добрый Google.

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

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

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

<!--noindex-->
 <center><?php
 print get_num_queries(). ' - столько SQL запросов к базе.<br />'.
 timer_stop(0, 6). ' - за столько сгенерировалась страница.';
 ?></center>
 <!--/noindex-->

Посмотрим, какое состояние сайта на данный момент:

26 - столько SQL запросов к базе.
1,205022 - за столько сгенерировалась страница.

Это главная страница сайта про линукс. Теперь проверю таким же образом главную страницу этого сайта:

34 - столько SQL запросов к базе.
0,351147 - за столько сгенерировалась страница.

Как видите, запросов к базе данных больше, а скорость генерации страницы в ЧЕТЫРЕ раза меньше. При этом оба сайта на одном сервере, стоят практически одни и те же плагины, правда база данных на этом сайте поменьше, но все базы оптимизированы и весь хлам удален.
Все это приводит к мысли, что сам сервер не виноват, иначе все сайты тормозили бы примерно одинаково. Значит причина может быть в следующем:

1. Есть какой то кривой плагин, который тормозит генерацию страницы.

2. Кривой шаблон и какие то ошибки в верстке мешают нормальной работе.

3. На сайте есть вирус, который тормозит его работу. Как проверить на вирусы сайт читайте по ссылке...

4. Ошибки в базе данных и данные долго считываются.

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

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 мне осталось совсем немного и уверен я достигну этого результата, так как почти все уже сделано, осталось совсем немного...


Понравилась ИГРА? Возьми КОД, поставь себе на сайт и улучши поведенческие факторы!


13 комментариев
  1. Вот засада! Опять эта таблица выросла до 59 мегабайт, и откуда оно взялось? Сейчас буду разбираться....

    • Оказалось, что поставил один плагин, а он мне в базу залил 50 мегабай партнерских ссылок. Ужас!

  2. Спасибо, классная статья. Давно заметил с помощью плагина query monitor, что крон постоянно что-то делает, что замедляет генерацию страницы на 1 секунду. Просто в config.php прописал define('DISABLE_WP_CRON', true); и нормально стало. Кстати, далеко не все плагины и темы правильно работаю с аргументом autoload в options, и при удалении не подчищают за собой, потому эта таблица постоянно растёт при активном пользовании сайтом и экспериментах. Об этом хорошо рассказано тут https://wpmag.ru/2015/wordpress-options-performance/

    • Спасибо за полезные советы,обязательно попробую, так как проблему скорости на 100% пока не решил.

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

  3. Как не печально, а google page speed не нравится мое время ответа от сервера. Решил я написать хостеру и получил от него такой ответ:

    Могу сказать, что показатели вашего сайта достаточно высоки. Сам гугл своим сервисом практически равные результаты выдает для своего сайта. Так что это очень и очень хорошо.

    https://developers.google.com/speed/pagespeed/insights/?url=google.com&tab=desktop

    добавлю, что данный сервис параноит немного по отношению к скорости сайтов. Я бы не стал на 100% доверять ему.

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

  4. Вот такая команда еще есть, чтобы почистить базу от мусора:

    DELETE FROM `wp_postmeta`
    WHERE `meta_key` IN('_edit_lock', '_edit_last','_wp_old_slug')

  5. Интересная статья. У меня кстати что-то подобное есть, только касается вообще всего блога - ускорение работы сайта в 17 способов, там и этот пункт есть - связанные с оптимизацией базы данных - http://smarticle.ru/17-sposobov-kak-uskorit-svojj-blog-plaginy-kehshirovaniya-dlya-wordpress/
    Может кого заинтересует

  6. Здравствуйте! Очень познавательно, сейчас занимаюсь тем же. Вы особо не расписывали, как почистили таблицу wp_postmeta, можно подробнее? А то именно она у меня весит тонну. Или описанный вами в комментах способ и есть решение?

    DELETE FROM `wp_postmeta`
    WHERE `meta_key` IN('_edit_lock', '_edit_last','_wp_old_slug')

    Спасибо заранее!

    • Самое лучшее - это чистить вручную. Я делал так: искомую таблицу импортировал на компьютер и открывал в текстовом html редакторе, и там сразу видно, какой раздел забит мусором. Я запоминал номер строки, шел в базу, искал этот раздел и вычищал полностью.

      После всего этого я создал сайт на поддомене и только там тестирую плагины, и вам так советую 😉

      • Спасибо! Вручную долговато будет) Попробую на Денвере протестировать sql запрос, что вы выше приводили.

  7. Тоже дикая проблема, именно с кроном, решено было сделать следующее В файле wp-cron.php закомментировать строку:
    //ignore_user_abort(true);
    в файл конфигурации WordPress wp-config-php добавляем строку:
    define('DISABLE_WP_CRON', 'true');

Написать комментарий

Опубликовано © Блокнот вебмастера

СОВЕТ ВЕБМАСТЕРУ: Умение зарабатывать в интернете - это только пол дела, вторая половина - это умение ВЫГОДНО обналичивать электронные деньги. Вот список офшорных банковских карт, на которые можно выводить средства и потом снимать с них хрустящие купюры:

1. Epayments - можно открыть счет в долларах, евро и рублях. Формально банка нет, юридический адрес в Лондоне, но можно получить реквизиты банка в Латвии.

2. AdvCash - Офшорный банк находится в Белизе, можно открыть счет в долларах, евро, фунтах и рублях.

3. OkPay - Офшорная компания зарегистрирована на Британских Виргинских островах, можно открыть счет в долларах, евро и рублях.

4. Payeer - Штаб квартира этой платежной системы находится в Грузии, тут так же можно открыть счет в долларах, евро и рублях.

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