Категории
Производительность 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 только зарегистрированные пользователи могут комментировать и оставлять рецензии. Авторизованный пользователь так же может ставить отметки книгам, фильмам и другим постам. Вести учет прочитанных книг и просмотренных фильмов. Добавлять посты в избранное и иметь к ним быстрый доступ.