Оптимизация быстродействия страниц сайта
Зачем ускорять работу сайта?
Зачем ускорять работу сайта? Ну подумаешь, страницы сайта формируются за 3-5 секунд, пустяки – не так уж и долго. Тем более, при нынешних-то скоростях интернет-соединений.
Причина № 1: скорость загрузки страниц web-сайтов является одним из факторов их ранжирования поисковыми системами. Чем быстрее посетители получают страницы – тем выше вероятность, что ссылки на эти страницы окажутся в топе поисковой выдачи.
Причина № 2: далеко не везде скорость интернет-соединений так же высока, как в крупных мегаполисах. А значит, весьма вероятно, что где-то в области посетитель будет ждать загрузки нужной ему страницы вашего сайта не 3-5 секунд, а все 10 или 30 секунд. Не исключено, что он вообще не станет дожидаться – а попросту поищет какой-нибудь сайт пошустрее.
Причина № 3: медленная загрузка страниц, как правило, является признаком высокой нагрузки на сервер. Если так, то при одновременном посещении сайта десятью посетителями – сайт начнёт работать ещё медленнее, а одновременный визит сотни посетителей, возможно, наглухо «положит» сервер (это при том, что помимо людей, сайты ежедевно посещают ещё и легионы ботов), и сайт станет недоступен для посетителей.
Главные особенности современных «движков» web-сайтов
Главные особенности современных «движков» web-сайтов (в том числе при использовании в качестве интернет-магазинов) заключается в том, как они обрабатывают каждое наименование товара. И эти особенности хорошо нам известны.
Во-первых, каждый товар обрабатывается такими движками отдельно. Предположим, на странице вашего интернет-магазина нужно показать посетителю пятьдесят разных товаров. Стандартный «движок» действует так: сначала составляет список товаров, которые необходимо показать посетителю, затем отправляет в базу данных пятьдесят отдельных запросов, в каждом из которых содержится запрос параметров и характеристик каждого из пятидесяти товаров. Отправка каждого из этих запросов и ожидание ответа от базы данных занимает сравнительно немного времени, но в сумме общее время загрузки страницы может оказаться уже немалым. А если посетитель захочет увидеть на странице не пятьдесят, а сто товаров одновременно – время ожидания окажется ещё больше.
А разве можно как-то иначе, спросите вы?
Конечно, можно. Для этого существуют агрегатные запросы. Создатели «движков» крайне редко используют этот вид запросов, так как при их использовании теряется универсальность «движка», и предпочитают жертвовать быстродействием.
Как работают агрегатные запросы?
В таких запросах обычно содержится требование к базе данных предоставить сразу и список товаров, и перечень характеристик каждого из них. База данных в этом случае получает всего лишь один-единственный запрос и возвращает один-единственный ответ. Далее «движок» уже сам разбирает ответ от базы данных на отдельные товары (это занимает значительно меньше времени, чем пятьдесят раз запрашивать информацию о каждом из товаров), и быстродействие такой схемы может быть в десятки, а то и в сотни раз выше, чем в типовых «движках».
Во-вторых, многие движки при формировании страниц сайта предварительно подгружают множество совершенно не нужных ни вам, ни посетителям модулей: языковые модули, администраторские интерфейсы, плагины статистических расчётов и многое другое.
К примеру, один из популярнейших движков сайта сначала полностью подгружает на каждую страницу сайта администраторский интерфейс, после чего блокирует его для пользователей, так как у тех нет прав доступа в этот интерфейс!
Кроме того, повсеместная практика у таких движков – подгрузка всевозможных скриптов, компонентов и шрифтов (зачастую со сторонних сайтов, которые, в свою очередь, откликаются тоже далеко не мгновенно), и в результате посетителям приходится ждать загрузки страниц сайта по десять-пятнадцать секунд! Тогда как общепринятый когда-то и давным-давно забытый многими стандарт – это загрузка страницы не более чем за 0,5 секунды, если дольше – посетителю уже некомфортно.
Что мы делаем для ускорения работы сайтов?
1. Убираем все запросы к сторонним сайтам. Всё, что необходимо для работы сайта – должно храниться на том же сервере, что и сам сайт.
2. Оптимизируем MySQL-запросы. Всюду, где возможно, выводим запросы из цикла и заменяем на агрегатные. Где невозможно – реконструируем запросы так, чтобы они выполнялись быстрее. Максимальное количество MySQL-запросов к базе данных для одной страницы не должно превышать десяти-двадцати. Если больше – это уже грубая ошибка в архитектуре сайта, приводящая к чрезмерному потреблению оперативной памяти, повышенной нагрузке на сервер и в конечном итоге при высокой посещаемости сайта – к его полной неработоспособности.
3. Добавляем в базу данных так называемые «индексы», в том числе комбинированные – правильное добавление индексов способно ускорить работу сайта в несколько раз, тогда как отсутствие индексов или неверная индексация данных может привести к значительному снижению скорости загрузки страниц. Последствия отсутствия индексов – те же самые, что в предыдущем пункте: повышенное потребление оперативной памяти и нагрузка на сервер, при высокой посещаемости – неработоспособность сайта.
4. Убираем все запросы к ресурсам, которые не используются на сайте (к неиспользуемым скриптам и шрифтам, к переводчикам содержимого сайта на хинди и суахили, и пр.). При создании странц сайт не должен обращаться к компонентам, которые не используются на его страницах и загружаются «на всякий случай»!
