Блог студии 77

Оптимизация скорости сайта

31 мая 2011

В каждом успешном веб-проекте посещаемость со временем растет. Быстро или медленно, но растет. И все счастливы. У вас успешный проект, радующий посетителей и приносящий доход. Но в какой-то момент, когда любой сбой в работе – действительно ощутимая проблема, когда число посетителей начинает измеряться сотнями или тысячами, сайт начинает работать все медленнее и медленнее. Сначала в послеобеденные и вечерние «часы пик», затем регулярно. Что делать?

Существует 3 решения проблемы:

Вариант 1, «Экзотический»: заключается в упрощении функционала сайта – отключении необязательных ресурсоемких элементов. Был случай, когда владелец сайта, чтобы не обращаться за профессиональной помощью, самостоятельно удалил с хостинга файлы сайта, отвечающие за отображение нескольких популярных разделов. Результат оказался весьма непредсказуемым, но следующие несколько дней (в которые этот владелец активно искал, кто ему всё починит) сайт, точнее его куски, действительно работали быстрее.

Вариант 2, «Затратный»: наращивание мощности сервера, на котором расположен сайт (вертикальная масштабируемость). Аренда серьезного хостингового оборудования может достигать $150 в месяц (это примерно в 15–30 раз дороже стандартных вариантов).

Вариант 3, «Углубленный»: создание изначально оптимизированного сайта, который не захлебнется от 5–6 тысяч посетителей в день, работая на обычном хостинге. Часто в процессе разработки программисты недооценивают перспективы проекта и пренебрегают вопросами оптимизации кода сайта. Что из себя представляет данная оптимизация, постараюсь вкратце описать:

  • Оптимизация базы данных. Для загрузки одной страницы одним посетителем сайт вытягивает из базы какое-то количество разноплановой информации (каждое такое обращение к базе называется запросом). Как показывает практика, в нагруженных сайтах 90–95% мощностей веб-сервера приходится на работу базы данных. Следовательно, первым делом стоит уменьшить количество обращений к базе за счет улучшения структуры запросов;
  • Кэширование. Содержимое некоторых страниц сайта меняется достаточно редко. Когда на них заходит посетитель, сайт каждый раз обращается к базе данных и вытягивает необходимую информацию. Кэширование позволяет сохранить сгенерированный результат, и уже его сервер будет отображать посетителям. В некоторых случаях такой подход оказывается просто незаменимым. Тот же метод применяется к данным со сторонних сервисов;
  • Архитектура сайта. Правильная архитектура сайта важна, хотя и не так явно влияет на загрузку сервера, как запросы баз данных. Тем не менее, преимущественно от нее зависит последующее развитие и возможности расширения функционала проекта;
  • AJAX. Одна из особенностей технологии AJAX – возможность загружать небольшой кусочек информации на веб-страницу, не запрашивая у сервера целиком все данные. Технология не нова, но активно стала применяться с подачи Google (сервисы Gmail, Google Maps и Google Suggest) лишь 5–6 лет назад. Технология достаточно сложна в реализации и занимает много времени на разработку, но ее результаты сложно переоценить: почти мгновенная реакция элементов сайта на действия пользователя и «легкие» запросы для веб-сервера. Современные высоконагруженные веб-проекты (социальные сети, порталы) активно внедряют AJAX и уже практически не используют классические запросы к серверу.

Несмотря на существенную экономию вычислительных мощностей, оптимизация кода имеет свои пределы, и по мере развития сайта вопрос переезда на новый хостинг или выделенный сервер снова всплывает. Гиганты социальной веб-индустрии имеют огромные дата-центры (например Вконтакте только 2–3 тысячи серверов для обработки и хранения видео) и целые подразделения высококлассных программистов, большая часть работы которых посвящена оптимизации каждого нового модуля сайта.

Оптимизация скорости сайта

Другие статьи автора: