DANFA

Долгий ответ от сервера: Как найти и исправить причину

Ускорить загрузку сайта можно при помощи "манипуляций", о которых я рассказывал в теме: Ускорить загрузку сайта. Я это все проделал, сайт стал действительно работать быстрее, но, мне казалось, что этого мало, что сайт все ровно грузится очень долго... После переезда на VDS, сайт стал грузиться чуть дольше. Закончив настраивать сервер и исправив несколько ошибок (не совсем удачный переезд) я перешел к поискам причины долгой загрузки страниц, оказалось - долгий ответ от сервера. Время ответа составляло 0.6 - 0.8 секунд, конечно, жесть...
Пожалуй, самое сложное в этом деле - это найти причину долгого ответа, я нашел причину и сейчас расскажу, как это сделал.

Перечитав несколько статей, начинаешь понимать, что конкретного ответа на вопрос в чем причина долгого ответа сервера, просто нет, ведь каждый случай может оказаться уникальным. Многие советуют отключить все модификации, затем включать по одному и тут круг поиска резко сократится. Да! Таким образом можно найти виновника, но мне это не помогло. Мне помог "научный метод тыка"! Да! Именно "тыка"!

В общем, в индексном файла, с которого все начинается, у меня, как и во многих движках, фиксируется время в микросекундах, для получения точного времени генерации страницы и, быть может, для чего то еще. Делается это так:
define('PHPFOX_START_TIME', array_sum(explode(' ', microtime())));

Теперь, константа PHPFOX_START_TIME содержит в себе время старта выполнения сценария, использовав ее я могу в любом месте движка получить время затраченное именно до того места, где я размещу такой код:
echo array_sum(explode(' ', microtime())) - PHPFOX_TIME_START;

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

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

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