В данном цикле статей мы постараемся раскрыть ключевые моменты скорости работы сайтов:
- рассмотрим в деталях, что влияет на скорость загрузки сайта
- вопросы оптимизации сайтов под высокие нагрузки и ускорения генерации страницы
- затронем и тему seo оптимизации html кода под поисковые системы, в том числе и под google pagespeed insights
Эта статья является первой в цикле, в которой мы постараемся просто разъяснить из чего складывается скорость загрузки страниц сайта. Итак, приступим.
- При обращении к какой-либо странице интернет браузер отправляет запрос веб-серверу, указывая, какую страницу он желает получить (url адрес).
- Вебсервер принимает запрос и передаёт управление php обработчику, который в свою очередь выполняет код системы управления сайтом (cms wordpress, joomla, bitrix или другая), на которой работает Ваш сайт, и возвращает результат - html страницу сайта, соответствующую запрошенному url адресу. Время между получением запроса от браузера и возвратом ответа - есть время генерации страницы.
- Далее браузер приступает к отображению полученной html страницы. Для этого ему нужно загрузить все css стили, js скрипты, картинки и другие элементы, которые прописаны в полученном html коде. Это довольно многоступенчатый процесс, некоторые части которого могут выполняться параллельно, другие же должны дожидаться загрузки или выполнения javascript кода предыдущих частей. Время от получениея html кода от веб-сервера до полного отображения содежимого страницы в браузере - есть скорость загрузки страницы.
Именно от этих двух показателей и зависит скорость работы сайта в целом. Давайте рассмотрим от чего они зависят.
Параметры влияющие на скорость генерации страницы:
- В первую очередь это оптимизированность программного кода. Опытные программисты пишут код так, чтобы он быстро работал при максимально разных конфигурациях сервера, потреблял меньше ресурсов, чтобы сайт мог выдержать большую посещаемость. Не опытные - как получится. Чаще всего, код cms систем оптимизирован довольно хорошо и работает быстро. А вот дополнительные компоненты, которые пишут сторонние разработчики, написаны по-разному. Не редко бывает, что один маленький модуль, выполняющий на первый взгляд очень простую функцию, занимает половину времени генерации страницы и более. Примеры неоптимизированного кода будут рассмотрены в отдельной статье.
- Конечно же на скорость работы сайта влияет конфигурация сервера (модель и количество процессоров, объём оперативной памяти, скорость работы дисковой подсистемы) и уровень его загруженности. Например, в своей работе под хостинг мы используем серверы с двумя восьмиядерными процессорами серии intel xeon E5-26xx (обычно E5-2670 либо E5-2689), оперативной памятью от 64 до 128 Gb, гибридной дисковой подсистемой из минимум 4-х enterprise sas/sata дисков в конфигурации raid10 + ssd кеш из расчёта 500Gb кеша на каждые 2Tb данных. Средняя загрузка процессора на самых нагруженных серверах составляет 30%.
- Третий фактор - конфигурация программного обеспечения сервера. Его стоит рассмотреть в отдельной статье. Если которотко, есть два наиболее ключевых момента - это оптимизация php обработчиков и сервера mysql. Для ускорения работы php обязательно стоит использовать кеширование опт-кода (php акселлераторы) в оперативной памяти сервера. Наиболее стабильные системы кеширования - xcache и opcache. Оптимизация сервера mysql более многогранный процесс, но тут можно выделить основной момент - все наиболее часто используемые данные должны располагаться в оперативной памяти. Именно для этого мы ставим так много памяти в сервера хостинга. Вопросы более тонкой настройки mysql мы рассмотрим в отдельной статье. Тут стоить отметить, что плохо спроектированная структура большой базы данных и способы работы с ней (сложные вложенные mysql запросы без использования индексов) могут выполняться десятки секунд даже на очень мощных серверах и оптимизированных серверах.
Параметры влияющие на скорость загрузки страницы:
- Очень важным фактором является количество включаемых внешних элементов в html коде (css и js файлы, картинки, флеш-элементы и т.д.). Чем их меньше, тем лучше, т.к. большинство браузеров имеет лимит на количество параллельно выполняемых запросов к одному и тому же серверу. Обычно 10-20 соединений. Если элементов на странице больше, остальные становятся в очередь и дожидаются загрузки первых. Если количество картинок мы уменьшить не можем (они нам нужны), то например несколько css файлов можно объединить в один, равно как и js-файлы. В разных cms есть даже дополнительные компоненты, которые позволяют сделать это автоматически. Стоит правда отметить, что среди таких компонентов есть и плохо реализованные, которые приводят к существенному замедлению скорости генерации страницы.
- Блокирующий javascript код, до выполнения которого браузер не может приступить к отрисовке следующего блока страницы. Это довольно обширный материал, который будет рассмотрен детальнее. Если говорить обобщённо, то чаще всего, большинство скриптов можно перенести в нижнюю часть страницы, чтобы сначала загрузилась визуальная часть (css и картинки), а после уже выполнялся js-код. В это время пользователь уже может приступить к чтению.
- Также стоит отметить, что довольно часто сайты перегружают внешними скриптами. Например, элементы рекламных сетей, различные социальные сервисы, онлайн консультанты (работающие на сторонних серверах), системы статистики (счётчики и просто кнопки каталогов). Эти элементы, как правило, загружаются ещё медленнее, чем с Вашего сайта, т.к. для их получения браузеру требуется открывать дополнительное подключение к стороннему серверу. Кроме того, далеко не все такие сторонние сервисы работают достаточно быстро, т.к. часто бывают перегружены, а иногда и вообще не доступны. В последнем случае браузер будет ждать соединения с таким недоступным сервисом до нескольких секунд и лишь после этого переходить к следующему.
По скорости загрузки стоить также отметить, что над этим вопросом должны изначально задумываться разработчики сайта, проектируя его шаблон.
Надеемся, у нас получилось рассказать просто о сложном. В следующих статьях постараемся помочь Вам разобраться в том, как диагностировать и исправить проблемы, связанные со скоростью работы Вашего сайта. Но, к сожалению, тут уже не обойдётся без относительно сложных технических моментов. Поэтому, если Вы не являетесь веб-разработчиком или хотя бы веб-мастером, самостоятельно произвести оптимизацию скорее всего получится лишь по некоторым аспектам. Тем не менее, это даст Вам общее понимание принципов оптимизации и Вы сможете более уверенно вести диалог с разработчиками, к которым решите обратиться для решения вопроса.
С уважением,
Служба поддержки webguard.pro