29
декабря
2007

Оптимизация работы веб-приложений: введение

Изначально я предполагал написать пост с обзором нескольких средств повышения производительности веб-приложений, но, чтобы не начинать тему оптимизации с середины, добавить распространенное введение. Но, в процессе написания этого текста, стало понятно, что тема слишком большая, и мне не хочется отбрасывать многие из ее значимых аспектов. Поэтому я отказался от первоначального варианта заголовка («Оптимизация веб-приложений: коротко, о самом интересном») и вместо одного поста напишу серию заметок на эту тему. Этот пост посвящен общему обзору задачи.

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

Производительность любой программной системы оценивается по двум критериям: это скорость и ресурсоемкость. В контексте веб-приложений, скорость определяется максимальным количеством запросов, которое система может стабильно обрабатывать за единицу времени. Основными же показателями ресурсоемкости является нагрузка на процессор (обычно это наиболее ценный ресурс сервера) и объем используемой оперативной памяти.

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

Этапы работы типового веб-приложения

  • Сервер получает HTTP запрос от клиентскй программы.
  • В том случае, елси запросу соответствует статический файл, его содержимое сразу пересылается клиенту, и на этом итерация благополучно завершается. Но, учитывая, что в данный момент речь идет именно о веб-приложениях, нас больше интересует вариант с динамической генерацией страницы. При использовании CMS, появляются дополнительные этапы обработки запроса.
  • Если CMS реализована на интерпретируемом языке, первым из таких этапов будет передача исполняемого кода из ее файла (зачастую, из множества файлов) интерпретатору. Например, им может быть модуль Apache mod_php или mod_python.
  • Интерпретатор запускает на исполнение обработчик запросов CMS.
  • Если система работает с авторизованными пользователями (например, это веб-магазин или какой-либо социальный сервис, требующий идентификации «активных» посетителей), начало обработки любого запроса будет связано с восстановлением пользовательских данных из cookies или базы данных. Возможны комбинированные варианты, когда одновременно используются куки и считывание дополнительные данных из таблицы пользователей, либо сами куки хранятся в БД.
  • Дальнейшая обработка запроса обычно предполагает необходимость выдать контент или проанализировать и сохранить принятые данные. Вне зависимости от того, происходит ли генерация страницы или обработка данных из формы, понадобится взаимодействие с БД.
  • Практически в любой CMS используется свой обработчик темплейтов, используемый на последнем этапе обработки запроса. Он получает на вход данные и шаблоны, и выдает сгенерированные по ним веб-страницы. В простейшем случае синтаксический разбор шаблона подразумевает обычную замену специальных маркеров в его тексте (макросов) на фрагменты контента. Но зачастую используются более мощные шаблонизаторы, которые используют свой собственный синтаксис. В качестве показательного примера можно приветси XSLT парсеры, которые могут быть использованы на этом этапе для генерации XHTML кода веб-страниц из данных в формате XML. В некоторых случаях этап обработки шаблонов так же связан с запросами к БД для вставки в страницы второстепенного контента (такого как списки категорий, ссылки на связанные материалы, иные динамические навигационные элементы, статистическую информацию и т.п.).

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

  • Взаимодействие с файловой системой.
  • Интерпретация кода программы.
  • Работа с базой данных.
  • Синтаксический разбор кода шаблонов страниц.
  • Передача данных по сети.

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

Ссылки по теме:

  • Algorithmic efficiency @ Wikipedia — общее понятие эффективности и оптимизации в контексте программного обеспечения.
  • Web application @ Wikipedia

Комментарии к заметке «Оптимизация работы веб-приложений: введение»

# Paradigm.ru » Blog Archive » Оптимизация работы веб-приложений: файловая система: (30 декабря, 2007 @ 00:12)

[...] задачи в контексте первого из перечисленных в предыдущей части факторов. Речь пойдет о файловой [...]

Написать комментарий

Можно использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> .