Почему мой сайт тормозит?

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

Кто виноват?

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

В чем проблема?

Прежде всего необходимо выяснить, не произошло ли резкое увеличение посещаемости вашего сайта. Такой, казалось бы, очевидный момент нередко выходит из поля зрения вебмастера. С одной стороны, событие это весьма приятное (какой же вебмастер не жаждет видеть посетителей на своем сайте?!), однако не всегда выбранный вебмастером хостинг или тарифный план позволяет «прокачать» через сайт скачкообразно возросший трафик. В большинстве случаев хостинг-провайдер предложит вам перейти на более дорогой тарифный план или вообще съехать на выделенный сервер (VDS или dedicared), который, как Вы понимаете, настраивать придется самостоятельно, а для этого нужна совсем другая квалификация. Итак —

Если увеличилась посещаемость

Если ваш хостинг-провайдер использует nginx, часть статической нагрузки (так называемая «статика» — картинки, CSS, JavaScript) может отдаваться им. Уточните у своего хостинг-провайдера, каким образом можно оптимизировать отдачу статики на вашем сайте.

Оптимизировать отдачу статики стоит в любом случае — это высвободит ресурсы для работы скриптов, оптимизация работы которых делается иначе.

Если вы используете на своем сайте какую-либо из популярных CMS, обратитесь к документации по ней и постарайтесь выяснить, не является ли рекомендованным (или даже обязательным) использование акселераторов PHP и кеширующих код модулей (eAccelerator, XCache, memcached). Убедитесь, что эти инструменты доступны у вашего хостинг-провайдера и проверьте, использует ли их ваш сайт. В отдельных случаях можно значительно ускорить работу сайта и повысить его устойчивость к высоким нагрузкам только за счет этих инструментов!

Не стоит пренебрегать и встроенными в CMS возможностями по кешированию контента: как правило, во всех современных CMS такие возможности имеются и неплохо работают.

Дальнейшая оптимизация требует навыков работы с языками программирования и базами данных, и если вы не компетентны в данном вопросе, рекомендуем вам обратиться к специалисту.

Если посещаемость не изменялась

Для начала попробуйте вспомнить, не производили ли вы в последнее время каких-то изменений со своим сайтом — добавляли/устанавливали модули, расширения (plugins), коды бирж ссылок/статей и «партнерок» и т.п. Как правило, внезапные «тормоза» сайтов связаны именно с подобными изменениями. Попробуйте отключить эти модули на время и проверьте, не изменилась ли скорость работы сайта.

Иногда случается, что проверенный код, исправно работавший несколько месяцев, вдруг начинает работать медленно или перестает работать вовсе. Чаще всего причиной этого является обращение к внешним источникам данных при отрисовки страницы. Рассмотрим подробнее.

Внешние вызовы PHP

Получение кода информеров, курсов валют, ссылок с бирж и т.п. часто сопровождается включением в ваш проект стороннего кода. Использование функций file_get_contents(), file(), include(), require(), fopen() и подобных для получения данных со сторонних сайтов приводит к тому, что в случае отсутствия связи между вашим сайтом и сайтом-ресурсом (например, по причине неработы сайта-ресурса или из-за потери связанности сети) скрипт будет ожидать соединение длительное время, и все это время страница вашего сайта или будет отображаться частично, или не будет отображаться вовсе. Более того, в такой ситуации выделенные хостинг-провайдером вашему аккаунту обработчики веб-сервера быстро заканчиваются, и сайт перестает отвечать на запросы в принципе — в лучшем случае при обращении к нему вы увидите ошибку 502 или 503.

Поищите в коде своих страниц обращения к внешним ресурсам и попробуйте отключить их на время. Если работа сайта при этом нормализуется, рекомендуем заменить такие обращения на получение данных из локальной копии, которую можно обновлять по расписанию (cron) с помощью внешних вызовов с ограничением времени выполнения скрипта до какой-то разумной величины — скажем, 30 секунд вполне достаточно, чтобы получить практически любой внешний ресурс.

Внешние включения CSS/JavaScript

В этом случае при недоступности внешнего ресурса вы получите ограниченный функционал страницы сайта и испорченный дизайн. Если это ресурсы не динамические, попробуйте сделать их локальные копии и обращаться к ним.

Бывают ситуации, когда ограниченный функционал вебмастер замечает не сразу, а лишь через некоторое время: например, неправильная установка мониторинга от Яндекс.Метрики — сразу ошибку можно и не заметить.

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

Mozilla Firefox + плагин Firebug


На вкладке «Сеть» (Network) этого плагина можно диагностировать всю последовательность загрузки элементов страницы и определить, какие из элементов не загрузились: проблемные элементы подсвечиваются красным цветом.

Инструменты разработчика Google Chrome


Кликните правой кнопкой мыши на странице и выберите «Проверить элемент» (или нажмите Ctrl+Shift+I). Выберите вкладку «Resources» и включите отслеживание (по умолчанию отслеживание отключено). Теперь при обращении к странице вы сможете увидеть последовательность загрузки различных ее элементов и диагностировать проблему.

Инструменты разработчика MS Internet Explorer 8

К сожалению, на момент написания данной статьи функционал, подобный описанному выше, в браузере MS Internet Explorer отсутсвтует.

Синхронные вызовы JavaScript

Иногда случается, что на странице сайта используются синхронные вызовы JavaScript, которым необходимо дождаться полной загрузки страницы и затем продолжить работу. Как вы уже, наверное, догадались, в этом случае посетитель сайта не увидит страницу, пока все необходимые скрипты не будут загружены. Как правило, в строке статуса браузера (Status bar) можно увидеть, доступ к какому ресурсу затруднен. Если сделать этого не удается, можно воспользоваться теми же инструментами, что и в предыдущем пункте.

Предупрежден — значит вооружен!

Как видите, основных причин возникновения проблем со скоростью загрузки страниц достаточно немного. Более того, вполне посильной задачей является предупреждение возникновения этих ситуаций: хорошо продуманный, тщательно спроектированный и аккуратно реализованный сайт, размещенный на качественной технической площадке, развитие которого постоянно отслеживается разработчиком, не станет ни жертвой внезапно возросшей посещаемости, ни заложником недоступных внешних ресурсов. Желаем вашим проектам работать быстро и без ошибок!

комментария 3

Добавить комментарий