Повышение производительности веб-приложений. Лекция 1. Введение в оптимизацию веб-приложений
В последнее время я достаточно долго работал над небольшим курсом лекций по оптимизации веб-приложений, однако некий злой рок преследовал этот курс от очного проведения лекций и записи видео дляTechDays. Рано или поздно это случится, тем временем я решил опубликовать материалы лекций курса в качестве статей, пообещав самому себе регулярно садиться за клавиатуру и превращать каракулеобразные заметки в небольшом потертом «молескине» в осмысленный текст в формате статей. Собственно, это и есть первая лекция курса. В этой лекции много общих слов и сели вы не любите полные воды тексты, можете пропустить все до части «подходы к оптимизации веб-приложений». Несколько слов о курсе лекций Курс ориентирован, прежде всего, на платформу ASP.NET, с особенным прицелом на ASP.NET MVC Framework. Тем не менее, базовые принципы и подходы могут быть использованы на разных платформах с использованием разных технологий. Сам автор курса считает платформу ASP.NET наиболее подходящей для эффективного решения задач веб-разработки. Материал в лекциях излагается в максимально сжатом виде и в область рассмотрения входят только рекомендуемые к действию советы. Рассматривать все возможности оптимизации и все то, что «можно было бы сделать, если очень захотеть» нет желания, и хватает совести не отнимать у читателей лишнего времени. В курсе будут рассмотрены только прикладные аспекты оптимизации. Написание качественного и быстрого кода в материалы курса не входит. Также в курсе не будет рассмотрена высокоуровневая архитектура масштабируемых приложений – это может стать темой следующего курса лекций. Язык примеров – C#, основная технология – ASP.NET MVC, на момент написания курса текущая версия четыре developer preview. Введение в оптимизацию веб-приложений Как и подобает полноценному курсу, прежде чем рассматривать конкретные техники и методики, нужно определиться с процессом оптимизации веб-приложений, целями и задачами этого процесса и основными подходами к оптимизации. Прежде всего, целью оптимизации является получение оптимальной скорости отклика приложения в ответ на действия пользователя. Пользователем могут выступать: удаленный клиент, работающий через браузер или приложение, удаленный веб-сервис, другое веб-приложение (в случае API вызовов) или локальное приложение, осуществляющее вызов по протоколу HTTP. В конечном итоге, задача оптимизации производительности обеспечить оптимальную скорость отклика для как можно большего количества пользователей. Остановлюсь подробнее на этом моменте. Нельзя ставить целью оптимизации получение максимально возможной скорости отклика веб-приложения, потому как процесс оптимизации в данном случае может быть бесконечным, занимать много времени и не приводить к ощутимым результатам. Для веб-приложений существует физический параметр, ограничивающий минимальное время отклика – скорость работы канала передачи данных. Кроме того, есть и некоторая скорость восприятия клиента – большинство клиентов не сможет отличить время выдачи в 0.2 секунды от времени выдачи в 0.02 секунды. При этом для пользователей скорость работы веб-приложений складывается не только из времени серверной обработки и передачи данных, а также из времени отображения в браузере и работы самих страниц в браузере. В дальнейшем в курсе мы будем рассматривать и клиентскую и серверную оптимизацию веб-приложений. Тем не менее, оптимизацию следуют производить на всех этапах создания приложений – от проектирования архитектуры, конкретной реализации в коде, до тестирования готового приложения. Процесс оптимизации можно отобразить приведенной ниже последовательностью.
Основные элементы, влияющие на производительность приложения Разработчики веб-приложений часто забывают о том, что в процессе работы приложения участвует не только само приложение, работающее на сервере, но и еще целый ряд узлов.
Соответственно, нужно на каждом уровне необходимо понимать, что можно сделать на каждом уровне и чего сделать нельзя, на основании этого знания стоит определить области, в которых стоит проводить оптимизацию. О том, что и как можно сделать будет рассказано подробнее далее в лекциях курса. Подходы к оптимизации веб-приложений Основных подходов к оптимизации несколько:
В списке выше многократно упоминается процесс кеширования. Да, кеширование критически важно для хорошей производительности, поэтому важно думать над кешированием данных на уровне всех слоев системы – в логических слоях приложения, в физических слоях взаимодействия между клиентом и сервером, кеширование на уровне базы данных и на уровне браузера. Кешированию будет посвящено много времени в представленном курсе лекций. На этом завершается первая лекция курса. В следующих лекциях будет представлен практический материал, и я постараюсь использовать как можно меньше общих слов. Спасибо за внимание. |