По некоторым сайтам в Яндекс Вебмастере выдаются такие предупреждения:
Рассмотрим популярные причины появления такого уведомления в панели Вебмастера на примере этого сайта speed24.ru.
Высокая нагрузка на сайт
Высокую нагрузку, с которой сервер не может справиться в течение трех и более секунд, могут создавать:
- плотный трафик пользователей на сайт
- перегруженная запросами база данных
- запросы по сети других ресурсов
Плотный трафик
Возьмем для примера самый дешевый шаред-хостинг. Он может выдержать 200 посетителей в день, и даже больше, если нагрузка распределена более-менее равномерно. Трафик в 10 тыс посетителей в сутки для шаред-хостинга скорее всего станет неподъемным. Поэтому нужно сравнить даты предупреждений с пиками посещаемости. Это даст ответ на вопрос, "а не пора ли переезжать"? Большие объемы по обновлению каталога также могут быть причиной непомерной нагрузки.
База данных
Однако сайт speed24.ru не имеет такой нагруженный трафик, чтобы он был причиной конкуренции за ресурсы сервера. Может быть виновата медленная база данных? Действительно, сложные SQL-запросы, которые выбирают нужные данные, могут быть причиной медленной генерации страницы. Некоторые CMS даже выводят сообщения, похожие на это:
Время генерации страницы: 2.6737 секунд
Запросы к базе: 185
Если такого модуля в вашей CMS нет, можно установить специальный профилировщик, который собирет всю необходимую информацию. Но сайт speed24.ru не использует базу данных, будем искать причину дальше.
Запросы других сетевых ресурсов
Вот с какими проблемами медленной генерации страницы мы сталкивались:
- цены на товары хранились в долларах, и пересчитывались по курсу, который интернет-магазин получал с другого ресурса в режиме он-лайн, с каждым открытием страницы сайт лазил в интернет
- часть содержимого страницы бралась с другой площадки, и также в режиме он-лайн, без какого-либо кеширования
- каждый показ контента запускал задачу проверки очереди email-сообщений и их отправку
Во всех перечисленных случаях задействованы внешние сетевые ресурсы, которые сами могут быть перегружены. И даже работая в штатном режиме, такое сетевое взаимодействие обходится в 0,1-3 секунды на каждый вызов. Решение таких проблем:
- перекладывать выполнение заданий на отдельный процесс, запускаемый по расписанию
- запуск скриптов параллельно в фоновом режиме
- хранение данных стороннего ресурса в кеше и периодическое обновление в фоне
Мы составили наглядную схему работы сайта, показав на нем быстрые и медленные элементы. Конечно, какие-то компоненты системы могут в реальности отсутствовать, а скорость показана относительно работы других ресурсов. Важно, что это помогает понять, из-за чего страницы сайта слишком долго отвечают.
Медленный хостинг
Допустим, что сайт хорошо оптимизирован для нагрузки. Что еще может привести к возникновению предупреждения "3 секунды"?
Если используется шаред-хостинг, или VDS с виртуализацией OpenVZ, то могут быть виноваты "соседи" по хостингу, которые в это время нагружают сервер, например плановым заданием обновления каталога на 10 тыс позиций, с пережатием картинок и генерацией XML-файлов выгрузок. К сожалению, такой случай довольно трудно определить, находясь "внутри" контейнера OpenVZ, или имея очень ограниченные права на шаред-хостинге. А поиск причины похож на поиск ответа "как узнать, что ты находишься в матрице".
Вот как выглядит смена хостера и технологии виртуализации с OpenVZ на KVM:
Вообще, сообщения "страницы слишком долго отвечают роботу" мы видели на сайтах, которые оптимизированы по скорости, а также на одностраничнике, который полностью сделан на HTML. Почему же такое случилось? Мы подумали и решили, что если такие случаи единичны, то причина кроется в плохом канале связи (возможных сетевых проблемах у хостера), что исправить нельзя, да и нет особого смысла. А если предупреждения сыпятся часто, а видимой причины нет, нужно мониторить нагрузку.
Кстати, с помощью этих инструментов можно промониторить сайт и найти страницы, которые долго загружаются.