2.17.2.3. Оптимизация сайта
Увеличить производительность и скорость работы сайта можно разными способами:
- Оптимизация сайта:
- Оптимизация работы сайта (скриптов, запросов к базе данных, страниц и т. д.).
- Использование возможностей хостинга для оптимизации работы сайта.
- Оптимизация работы ПО сервера (для VPS и выделенных серверов).
- Увеличение доступных ресурсов:
- Смена тарифа бизнес-хостинга на более высокий.
- Увеличение мощности VPS сервера или смена тарифа на более высокий (для VPS и выделенных серверов).
Оптимизация сайта не случайно вынесена на первое место, потому что является более приоритетной, чем другие способы. Если взять два совершенно одинаковых сервера с одинаково настроенным ПО и разместить на одном сайт, на котором используется неоптимизированная тема оформления, плюс 2-3 десятка никем не проверенных в отношении нагрузки и взаимодействия плагинов, а на другом тот же сайт, но использующий кеширование готовых страниц, с критически необходимым минимумом максимально оптимизированных между собой плагинов и модулей, то окажется, что второй сервер даже без выполнения других пунктов может работать в 2-4 раза быстрее (в некоторых случаях всё намного драматичнее и после грамотной оптимизации сайта скорость может увеличиваться в десятки раз) и создавать меньше нагрузки, чем первый.
Со стороны сайта
В данной статье не будет конкретных рекомендаций по изменению кода скриптов для улучшения производительности по причине сложности реализации универсальных решений для каждой системы управления. Все действия по настройке и изменению сайта нужно выполнять самостоятельно или привлекать для этого сторонних специалистов из сферы разработки сайтов.
Основные направления оптимизации, которые касаются большинства популярных CMS:
- Отказ от плагинов и дополнительных модулей. Всевозможные плагины, модули и расширения, которые, казалось бы, расширяют функциональность сайта, в очень многих случаях — его же враги в плане производительности. Причин тому масса. Основная — многие модули написаны энтузиастами и имеют очень низкое качество как в плане потребляемых ресурсов, так и в плане бесконфликтности с другими модулями и CMS. Поэтому перед установкой любого модуля или плагина подумайте, нельзя ли реализовать тот же функционал без него? Если нельзя — после установки подробно протестируйте его под нагрузкой, оцените потребление ресурсов, почитайте отзывы других пользователей.
- Отказ от ворованных и некачественных тем оформления и плагинов. Как ни странно, это тоже важный момент, так как в 8 случаях из 10 взломанный продукт, вопреки заверениям хакеров, остаётся не только опасным в плане возможных «закладок» и бекдоров, но и гораздо более проблемным в плане потребления ресурсов. «Самописные» же компоненты и темы в подавляющем большинстве случаев очень некачественные, по возможности избегайте их. Если важно низкое потребление ресурсов, не используйте «универсальные» темы. За счёт использования различных дополнительных фреймворков такие «комбайны» работают медленнее, а ресурсов потребляют больше.
- Кеширование страниц скриптами. Такой способ позволяет генерировать страницы сайта заранее и сохранять их в статические файлы, которые будут передаваться в разы быстрее. Стоит использовать сохранение страниц скриптами сайта в файлы везде, где возможно. Отдача заранее сформированной страницы сайта тратит гораздо меньше ресурсов и времени, чем формирование её для каждого нового посетителя «с нуля». Этот способ является одним из наиболее эффективных за счёт использования статических страниц.
- Оптимизация базы данных и запросов к ней. При использовании большинства CMS одним из наиболее важных моментов является оптимизация работы базы данных и запросов к ней, так как она используется для хранения практически всех данных, требуемых для корректной работы сайта и генерации страниц. Многие сайты могут работать медленно только по причине проблем с хранением данных в базе данных и неоптимизированных запросов к ней. Именно поэтому может расти показатель TTFB и увеличиваться время на обработку запросов.
- Обращения к сторонним источникам. Существенной проблемой в скорости загрузки страниц или их генерации может быть загрузка данных с других серверов. Причин проблем в загрузке ресурсов может быть огромная масса, но наиболее частыми и решаемыми на стороне сайта являются:
- Удалённость сервера, к которому выполняются запросы. Чем дальше размещается целевой сервер, тем больше времени занимает обмен данными с ним. Это выражается в медленной генерации страниц скриптами из-за того, что они ожидают ответ от удалённого сервера и, как следствие, в медленной загрузке страниц в браузере, довольно часто — зависающей на некоторых этапах «отрисовки» страницы (это явно выражено при последовательной медленной загрузке частей страницы — сначала шапки, затем, после некоторого ожидания, подгрузки остального контента).
- Недоступность целевого сервера. Если сервер, с которым должен выполняться обмен данными, недоступен, то может возникнуть огромная проблема в скорости загрузки и генерации страниц. Если проблема возникает на стороне бекенда, то страница может быть длительное время пустой и только когда процесс соединения будет сброшен — страница может отобразиться (чаще всего это обрыв соединения, что в рамках виртуального и бизнес-хостинга произойдет спустя 3600 секунд от начала соединения), при этом будет казаться, что сайт не работает.
- Для решения подобных проблем рекомендуем:
- Использовать CDN-сервисы для нужных ресурсов, если такая возможность есть.
- Минимизировать удалённое хранение ресурсов. Это можно сделать путём хранения нужных ресурсов в каталоге сайта, тем самым повысив стабильность и скорость сайта.
- Использовать асинхронную загрузку ресурсов (с помощью
asyncилиdefer), которые не участвуют в генерации контента или являются маловажными. К примеру, счётчики, реклама и прочее. - Минимизировать обращения к сторонним ресурсам со стороны бекенда и по возможности устанавливать определённый тайм-аут для функций, которые выполняют подключения (к примеру, используя
stream-set-timeout, вcurlопцияCURLOPT_CONNECTTIMEOUT, и др.).
- Уменьшение количества запросов к серверу. При загрузке сайта, в случае множества подгружаемых файлов, могут возникать проблемы в скорости его загрузки или же вовсе в виде ошибок. На хостинге существуют определённые ограничения на количество одновременных соединений, в связи с чем могут появляться ошибки. Но даже если таковых нет, то множество запросов будет влиять на скорость загрузки сайта. Каждый файл создает отдельное подключение к серверу, процесс инициации подключения и всех остальных этапов для корректной передачи данных также занимает определённое время, что и создает задержки в скорости загрузки сайта. Если сравнивать два идентичных сайта, но в одном 150 загружаемых файлов, а во втором те же данные, но уже в 50 файлах, то можно заметить значительный прирост скорости его отображения. Для решения этой проблемы рекомендуем:
- Уменьшить количество загружаемых файлов на сайте путём отказа от ненужных элементов или путём подгрузки их после определённых событий (к примеру, прокрутка страницы, активация кнопок и прочее).
- Объединить возможные файлы в один или несколько. Если использовать несколько CSS-файлов, то в некоторых случаях их можно объединить в один для экономии количества запросов и улучшения сжатия. Автоматически такие действия могут проделывать некоторые плагины или компоненты, а также функционал Pagespeed. Но крайне важно убедиться, что при использовании таких средств оптимизации сайт работает корректно.
- Не стоит использовать асинхронную загрузку ресурсов повсеместно, так как если на сайте, где загружается 50 ресурсов, для всех файлов будет установлена асинхронная загрузка, то это породит 50 одновременных подключений при одном обращении к сайту, что может создать не только сложности в виде ошибок со стороны сервера из-за ограничений по одновременным соединениям, но также и на стороне клиента, который открыл сайт, так как все одновременные запросы также создают довольно высокую нагрузку на стороне браузера.
- Оптимизация ресурсов сайта. При загрузке сайта могут возникать проблемы, что сама вёрстка подгружается довольно быстро, но элементы сайта грузятся очень долго, всё подвисает и прочее. Чаще всего такая проблема наблюдается при неправильной загрузке крупных ресурсов сайта. К примеру, изображения, имеющие очень высокое разрешение, загружаются для мобильной версии сразу в высоком разрешении, или загрузка множества JS-скриптов с огромным количеством данных. Существуют различные технологии, позволяющие ускорить загрузку данных, к примеру некоторые из них:
- Lazyload (ленивая загрузка) — суть технологии заключается в том, что при открытии страницы загружаются не все изображения, а только те, которые попадают в область видимости. Остальные изображения подргужаются браузером динамически по мере прокрутки страницы.
- Оптимизация размера изображений. За счёт эффективного сжатия изображений можно добиться существенного прироста к скорости загрузки страниц.
- Использование изображений в формате WebP. Такой формат получил популярность за счёт меньшего «веса» относительно других форматов без потери качества изображения.
- Отложенная загрузка скриптов. В большинстве своем некоторые скрипты сайта не нужны до его генерации, потому их первоочередная загрузка теряет смысл. Чтобы сайт выглядел крайне быстрым, должна прогружаться первой визуальная составляющая сайта, после чего уже только весь динамический контент. За счёт такого изменения порядка загрузки можно добиться визуального ускорения загрузки сайта.
- И ещё один очень эффективный, но трудоёмкий и не всегда возможный путь — отказ от скриптов везде, где это возможно. Самый быстрый сайт — это сайт, который состоит из набора статических файлов. Один из вариантов такой реализации — использование систем управления контентом (CMS), которые генерируют набор HTML-файлов (разумеется сама административная часть CMS при этом вполне может состоять из скриптов). Примером такой CMS может быть Movable Type.
Со стороны хостинга
На хостинге есть ряд настроек, которые могут помочь в оптимизации работы сайта, но их не стоит воспринимать как универсальное средство на все случаи жизни, так как та или иная технология может не принести ожидаемой эффективности. Большая часть рекомендаций настроек на хостинге заточена на использование кеширования данных и страниц для последующей передачи клиенту без повторной обработки запроса скриптами и генерации страниц заново. Принцип кеширования данных позволяет уменьшить передаваемый объём данных между скриптами или серверами, уменьшать количество обрабатываемых сценариев и др., тем самым ускоряя генерацию ответа. Такой способ полезен для устранения проблемы с высоким TTFB. Важно учитывать, что не для всех CMS есть возможность настроить все указанные способы оптимизации.
- OPcache. Использование OPcache экономит время за счёт сохранения скомпилированного байт-кода скриптов. Такой способ полезен при использовании множества неизменных скриптов, компиляция которых может занимать много времени. OPcache подключается к сайту без необходимости внесения изменений в скрипты сайта.
- Memcache(d). Использование Memcache(d) в разных системах организовано по-разному — в одних он используется исключительно для сохранения данных, которые передаются из баз данных (что позволяет сэкономить на времени передачи запроса в БД, поиска нужных данных и передаче запроса обратно), в других он используется для кеширования конкретных страниц сайта (что более эффективно в плане скорости, но менее удобно в плане генерации динамического контента). Стоит обратить внимание, что поведение кеширования данных в памяти Memcache(d) определяется непосредственно скриптами сайта.
- Redis. Похож на Memcahce(d) за счёт того, что они оба сохраняют данные в оперативную память и после позволяют использовать её для более быстрого доступа. Логика поведения сохранения данных и прочего также схожа.
- PageSpeed. Модуль оптимизации PageSpeed установлен на хостинге по умолчанию и все его возможности доступны для любого сайта. В некоторой степени большинство его настроек могут быть опасными для работы сайта за счёт того, что изменяются имена подгружаемых скриптов, принцип их загрузки и др., в зависимости от включённых параметров. Но как один из способов оптимизации его можно рассматривать для ускорения загрузки содержимого. Важно понимать, что для уменьшения TTFB (времени ответа от сервера) данный способ не подходит, так как он направлен на улучшение генерации страниц в браузере клиента и загрузку ресурсов сайта.
- Кеширование статического содержимого. Ускорение загрузки веб-страниц путём кеширования страниц и подключённых в них ресурсов в браузере посетителя сайта. Поскольку такое кеширование производится не на стороне сервера, а на стороне клиента, то скорость первой загрузки сайта останется прежней, но последующие переходы по страницам или входы на сайт могут выполняться гораздо быстрее или вовсе не заметны, если сайт и кеширование организованы правильно.
Вопросы
Как можно ускорить работу моего сайта?
Оптимизация сайта производится исключительно специалистами из сферы разработки сайтов. Хостинг не имеет возможности производить такую оптимизацию и предоставлять конкретные рекомендации для каждой ситуации.
Можно ли ускорить работу сайта путём смены тарифа?
Тарифные планы виртуального хостинга работают на одних и тех же серверах, поэтому смена тарифа вряд ли поможет.
Если же используются тарифные планы бизнес-хостинга, то стоит просмотреть текущие графики нагрузки на сервер — если на них наблюдается предельные показатели потребления ресурсов, то смена тарифа на более высокий может помочь решить проблему.