Производительность web-приложений

Здесь речь пойдет о таких вещах как серверная и техническая оптимизация web-приложений. Что можно сделать с инфраструктурой web-сервера, чтобы получить быстрый проект, который сможет удовлетворить запросы большого числа пользователей.

Перед началом повествования предложу посмотреть и послушать доклад своего товарища Саши Нечаева на аналогичную тему.

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

Я так понимаю, что если вы зашли почитать эту статью или посмотреть видео, то вы, все-таки в курсе, зачем нужны быстрые сайты и теперь ищете информацию о том, как же сделать свой проект быстрее.

Итак, на что стоит обратить внимание, когда Вы пытаетесь сделать свой проект быстрым:

HTTP 2.0

Многие проекты работают по протоколу HTTP 1.1. Это не оптимальный путь передачи данных, есть более совершенный и быстрый протокол - HTTP 2.0, который оптимизирует механизм транспортировки запросов между сервером и клиентом. Но здесь есть небольшая проблема в том, что еще не все браузеры поддерживают этот протокол. И если Ваш проект из тех, которым пользуются клиенты со старыми браузерами, то переход на HTTP/2 вряд ли Вам подойдет.

SPDY

Для тех проектов, которым не подходит HTTP/2 можно предложить альтернативу - SPDY. Это HTTP совместимый протокол, разработанный Google и поддерживаемый браузерами Chrome, Opera, Firefox, Internet Explorer 11, Safari и Amazon Silk. Но с 9 Февраля 2015 года, Google объявила о планах прекратить поддержку SPDY в Chrome в начале 2016 года, в пользу HTTP/2. Проект поддерживать перестали, но пользоваться им для ускорения HTTP 1.1 вполне можно.

CDN

Посмотрите в сторону CDN (Content Delivery Network или Content Distribution Network) - сеть доставки и дистрибуции контента. Это географически распределённая сетевая инфраструктура, позволяющая оптимизировать доставку и дистрибуцию контента конечным пользователям в сети. Использование контент-провайдерами CDN способствует увеличению скорости загрузки аудио-, видео-, программного, игрового и других видов цифрового контента в точках присутствия сети CDN.

На скорость загрузки страницы и её содержимого сильно влияет то, насколько далеко пользователь находится от сервера. Это происходит из-за того, что при использовании технологии TCP/IP, применяемой для распространения информации в сети, задержки при передаче информации зависят от количества маршрутизаторов, находящихся на пути между источником и потребителем контента. Размещение контента между несколькими серверами средствами CDN сокращает сетевой маршрут передачи данных и делает загрузку сайта быстрее с точки зрения пользователя.

Использование CDN снижает количество промежуточных узлов, что существенно увеличивает скорость скачивания контента, следовательно, загрузки страниц.

Размещение серверов в непосредственной близости от конечных пользователей может увеличить исходящую пропускную способность всей системы. К примеру, наличие единственного порта 100 Мбит/с не означает данную скорость на всех участках сети, так как свободная пропускная способность магистрального канала в момент передачи может быть всего 10 Мбит/с. В случае, когда используются 10 распределённых серверов, суммарная пропускная способность может составить 10×100 Мбит/с.

Современные сети доставки и дистрибуции контента способны осуществлять автоматический контроль целостности данных на каждом из серверов сети. При этом гарантируется 100% доступность контента для конечного пользователя в случае потери связности между узлами сети, выхода из строя центрального или удалённого сервера.

Лучше всего использовать для статических данных: картинки, видео, файлы CSS, популярные библиотеки (например, JQuery) - для всех ресурсов, при передаче которых не нужно отправлять и принимать заголовки.

Разные браузеры одновременно с одного хоста грузят от 2 до 6 ресурсов. Если эти ресурсы грузятся из нескольких CDN, то отображение страницы происходит гораздо быстрее.

Предварительная загрузка

Здесь имеется ввиду возможность загрузки браузером контента в фоне. Пока пользователь просматривает текущую страницу, мы можем указать, какие ресурсы его могут заинтересовать следующими. Для этого можно использовать атрибуты из HTML 5 - prefetch и prerender. Сейчас эти атрибуты поддерживаются почти всеми браузерами, но чтобы перестраховаться и реализовать предзагрузку везде, можно воспользоваться мощью JavaScript или библиотеки jQuery.

Nginx вместо Apache

Администраторы веб-серверов часто выбирают Apache из-за его гибкости, мощности и широкой распространенности. Он может быть расширен с помощью системы динамически загружаемых модулей и исполнять программы на большом количестве интерпретируемых языков программирования без использования внешнего программного обеспечения. А Nginx из-за его эффективного потребления ресурсов и отзывчивости под нагрузкой, а также из-за возможности использовать его и как веб-сервер, и как прокси. Как бы ни был оптимально настроен ваш Apache, при своих максимальных нагрузочных характеристиках он лишь приближается к не настроенному Nginx.

Ускоряемся с Varnish

Varnsih является бесплатным решением для кэширования как статического, так и динамического контента. Работает он как фронт-энд к любому веб-серверу или серверу приложений и изначально ориентирован на высокую производительность, многопоточность и максимально эффективное использование возможностей ОС семейства Linux. И нет ничего удивительного в том, что он активно используется такими компаниями как Facebook, Twitter и LinkedIn.

Акселератор PHP

Акселератор PHP — модуль, кэширующий скомпилированный байт-код в памяти и/или на диске и в несколько раз увеличивающий производительность PHP. Как выглядит обработка сценария на PHP обычным интерпретатором:

  • копирование файла php в память
  • генерация байткода
  • выполнение байткода
  • выдача результата
  • очищение памяти от содержимого файла

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

Системы компоновки

Здесь имеются ввиду системы типа Grunt или Combine, которые объединяют все JS или CSS файлы в один файл, при этом уменьшая его за счет минификации и выстраивания всего кода в одну строку. Данный файл не пригоден для работы, он нужен только для продакшн сервера для уменьшения количества ресурсов, передаваемых по HTTP и для уменьшения веса таких ресурсов как JS и CSS файлы.

Выводы

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

Информация
Автор webmancer Нравится 0
Рейтинг 1 Не нравится 0
Голосов 1 Прочитали 1
Дата 2014-05-25 09:00:00 В избранном 0
Ваша реакция

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

Зарегистрироваться

Авторизоваться

На рекомендательном сервисе WEBmancer.Org только зарегистрированные пользователи могут комментировать и оставлять рецензии. Авторизованный пользователь так же может ставить отметки книгам, фильмам и другим постам. Вести учет прочитанных книг и просмотренных фильмов. Добавлять посты в избранное и иметь к ним быстрый доступ.