Читаем Журнал «Компьютерра» № 20 от 30 мая 2006 года полностью

Так называемые приложения Веб 2.0 предполагают более интенсивное использование CSS и JavaScript, чем раньше. Но для быстрой и качественной работы приложения мы должны оптимизировать размер и выдачу контента, который требуется для рендеринга страницы. На практике это означает, что мы должны сделать статический контент настолько маленьким и быстрым для загрузки, насколько это возможно, избегая немотивированной раздачи файлов, которые не претерпели изменений.

Эта задача несколько усложняется самой природой файлов CSS и JavaScript. В отличие от изображений, исходный код CSS и JavaScript скорее всего с течением времени будет меняться неоднократно. И нам нужно, чтобы после каждого изменения клиенты могли загрузить обновленные версии файлов, не пытаясь использовать старые версии, сохраненные в их локальном кэше (а также во всех кэшах, которые встретятся по пути). В этой статье мы обсудим, как облегчить жизнь пользователю – при первой и последующих загрузках страницы, а также по мере того, как приложение развивается и обновляется.

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

Монолит

Раньше считалось, что максимальной производительности можно добиться, объединив многочисленные CSS– и JavaScript-файлы в более крупные блоки. Вместо десятка JavaScript-файлов по 5 Кбайт каждый мы делали один файл размером 50 Кбайт. Хотя общий размер кода при этом не менялся, мы сокращали накладные расходы на обработку HTTP-запросов.

Также важен аспект распараллеливания. По умолчанию и IE и Mozilla/Firefox при использовании стабильного соединения загружают только два файла с одного домена (см. спецификацию HTTP 1.1, секция 8.1.4). Это означает, что пока не загрузятся все скрипты, мы не загружаем картинки. Все это время пользователи видят страницу без изображений.

Однако у этого подхода есть и недостатки. Совмещая все наши ресурсы, мы заставляем пользователя загружать всё и сразу. Разделив содержимое между разными файлами, мы могли бы распределить тяжесть загрузки поверх нескольких страниц (или вообще избежать загрузки отдельных блоков – зависит от поведения пользователя). Если же мы замедлим загрузку первой страницы, чтобы ускорить загрузку всех остальных, то можем столкнуться с тем, что второй страницы многие пользователи просто не дождутся.

Исторически этот крупный недостаток такого подхода нечасто брался в расчет. Но для системы, в которой постоянные изменения содержимого статических файлов – обычное дело, это важно, поскольку любое изменение в большом едином блоке требует, чтобы клиент перегрузил себе полный рабочий набор CSS или JavaScript. Если приложение представляет собой монолитный исходник на JavaScript размером 100 Кбайт, значит, каждая мелочь приводит к принудительной загрузке лишних 100 Кбайт.

Один в поле не воин

В качестве альтернативного подхода постараемся придерживаться золотой середины. Разобъем наши CSS– и JavaScript-ресурсы на множество подфайлов, сохраняя в то же время количество этих файлов функционально невысоким. С одной стороны, нам удобно разрабатывать приложения, разбивая код на логические блоки. С другой стороны, для работы приложения важно, чтобы этих блоков было не слишком много (так что нам приходится объединять эти файлы). Компромисса можно добиться, сделав определенные добавления к системе сборки билдов (набор инструментов, превращающий «грязный» код разработки в рабочий, готовый для развертывания код).

Для прикладного окружения, в котором среда разработки и среда исполнения четко разделены, подойдут простые техники управления кодом. Пусть в среде разработки код для пущей ясности разбит на множество логических блоков. Создадим в Smarty (язык шаблонов для PHP) простую функцию загрузки JavaScript:


{insert_js files="foo.js,bar.js,baz.js"}

function smarty_insert_js($args){

foreach (explode(‘,’, $args[‘files’]) as $file){

echo «n";

Пока все просто. Но затем мы во время сборки билда объединяем нужные файлы. Представьте, что в нашем примере мы должны объединить foo.js и bar.js в foobar.js, раз уж они почти всегда подгружаются вместе. Учтем этот факт при настройке нашего приложения и модифицируем код с учетом этой информации:


{insert_js files="foo.js,bar.js,baz.js"}

# map of where we can find .js source files after the build process

# has merged as necessary

$GLOBALS[‘config’][‘js_source_map’] = array(

‘foo.js’ => ‘foobar.js’,

‘bar.js’ => ‘foobar.js’,

‘baz.js’ => ‘baz.js’,

function smarty_insert_js($args){

if ($GLOBALS[‘config’][‘is_dev_site’]){

$files = explode(‘,’, $args[‘files’]);

$files = array;

foreach (explode(‘,’, $args[‘files’]) as $file){

$files[$GLOBALS[‘config’][‘js_source_map’][$file]]++;

$files = array_keys($files);

foreach ($files as $file){

echo «n";

Перейти на страницу:

Похожие книги

Строить. Неортодоксальное руководство по созданию вещей, которые стоит делать
Строить. Неортодоксальное руководство по созданию вещей, которые стоит делать

Тони Фаделл возглавлял команды, создавшие iPod, iPhone и Nest Learning Thermostat, и за 30 с лишним лет работы в Кремниевой долине узнал о лидерстве, дизайне, стартапах, Apple, Google, принятии решений, наставничестве, сокрушительных неудачах и невероятных успехах столько, что хватило бы на целую энциклопедию. Тони использует примеры, которые мгновенно захватывают внимание, например, процесс создания самых первых iPod и iPhone. Каждая глава призвана помочь читателю решить проблему, с которой он сталкивается в данный момент - как получить финансирование для своего стартапа, уйти с работы или нет, или просто как вести себя с придурком в соседнем кабинете. Тони прокладывал свой путь к успеху рядом с такими наставниками, как Стив Джобс и Билл Кэмпбелл, иконами Кремниевой долины, которые снова и снова добивались успеха. Но Тони не следует кредо Кремниевой долины, согласно которому для создания чего-то великого необходимо изобретать все с нуля. Его советы нестандартны, потому что они старой закалки. Тони понял, что человеческая природа не меняется. Не нужно изобретать способы руководства и управления - нужно изобретать то, что ты делаешь. Тони Фаделл – американский топ-менеджер. Он создал iPod и iPhone, основал компанию Nest и создал самообучающийся термостат Nest. За свою карьеру Тони стал автором более 300 патентов. Сейчас он возглавляет инвестиционную и консультационную компанию Future Shape, где занимается наставничеством нового поколения стартапов, которые меняют мир.  

Tony Fadell , Тони Фаделл

Финансы / Прочая компьютерная литература / Банковское дело
Самоучитель UML
Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы. Цель книги – помочь программистам освоить новую методологию разработки корпоративных программных приложений для последующего применения полученных знаний с использованием соответствующих CASE-инструментов.

Александр Васильевич Леоненков , Александр Леоненков

Зарубежная компьютерная, околокомпьютерная литература / Программирование / Прочая компьютерная литература / Книги по IT