Читаем Журнал «Компьютерра» № 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";

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

Все книги серии Компьютерра

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

«Если», 2002 № 04
«Если», 2002 № 04

ФАНТАСТИКАЕжемесячный журналСодержание:Майк Резник. СЕКРЕТНАЯ ФЕРМА, рассказСтивен Бернс. НАДО ЖЕ, ЛЕТИТ! рассказДжеймс Ван Пелт. ИНФОМАН, рассказЖан-Клод Диньак. ОРХИДЕИ В НОЧИ, рассказБрайан Олдисс. ЗАМЕЧАТЕЛЬНЫЕ ИГРУШКИ НА ВСЁ ПРОШЛОЕ ЛЕТО, рассказВидеодром*Тема--- Андрей Вяткин. «СНОВА ЧЕРНЫЕ СИЛЫ РОЮТ МИРУ МОГИЛУ» (статья)*За кадром--- Дмитрий Байкалов. ТРИНАДЦАТЬ ЛЕТ СПУСТЯ (статья)*Рецензии*Интервью--- Владимир Хотиненко «Я БЕЗУСЛОВНО ДОВЕРЯЮ СУДЬБЕ»Леонид Кудрявцев. КУКУШОНОК, рассказДалия Трускиновская. МАРШРУТ ОККАМА, повестьЕвгений Харитонов. АТАМАНША (статья)ФактыКейдж Бейкер. СОРТИРОВКА, рассказОлег Овчинников. ПОШИВ ШУБЫ ИЗ ВАШЕГО МУТОНА, ИЛИ ТЕХНИКИ МАЛЕНЬКОЙ УФЫ (эссе)РецензииДмитрий Байкалов, Андрей Синицын. ИГРЫ БОЛЬШИХ ДЕТЕЙ (статья)Конкурс Банк идей--- Сергей Лукьяненко. ЕСЛИ ВЫ СВЯЖЕТЕСЬ ПРЯМО СЕЙЧАС…, рассказГеннадий Прашкевич. МАЛЫЙ БЕДЕКЕР ПО НФ, ИЛИ КНИГА О МНОГИХ ПРЕВОСХОДНЫХ ВЕЩАХ (продолжение эссе)КурсорPersonaliaОбложка Игоря Тарачкова к повести Далии Трускиновской «Маршрут Оккама»Иллюстрации: В. Овчинников, С. Голосов, А. Балдин, Т. Филиппова, А. Филиппов, И. Тарачков, С. Шехов

Андрей Вяткин , Брайан Олдисс , Владимир Хотиненко , Далия Трускиновская , Кейдж Бейкер

Фантастика / Журналы, газеты / Научная Фантастика / Фэнтези / Ужасы и мистика
«Если», 2012 № 12
«Если», 2012 № 12

Адам-Трой КАСТРО. НЕЧИСТЫЕ РУКИНачало карьеры уже известного нашим читателям межгалактического адвоката признано зарубежными любителями фантастики лучшей повестью, опубликованной на страницах журнала «Analog» в прошлом году.Евгений ЛУКИН. ТЕЛО, КОТОРОМУ СЛУЖИШЬ«Производственная повесть» — так определил автор жанр своей новой работы. В рамках «соцреализма», о котором у наших читателей лишь смутные представления, это воистину образцовое произведение. Но, как всегда, с поправкой на парадоксальность прозы любимого писателя.Рик УИЛБЕР. КОЕ-ЧТО НАСТОЯЩЕЕОказывается, ядерной программой нацистов занимался не только Штирлиц.Кайл КЁРКЛАНД. БЛОХА НА СПИНЕЗдесь можно усмотреть явную перекличку с классическим романом Роберта Хайнлайна. Однако не так все просто…Карл ФРЕДЕРИК. ПИЩЕВАЯ ЦЕПЬБалансировать на вершине — самая неустойчивая позиция.Пол МАКОУЛИ. БРЮС СПРИНГСТИНА мы-то думали, что подобные привидения — это наше ноу-хау.Александр РОЙФЕ. СПАСИБО ЗА ПОПЫТКУЧеловек хотя бы постарался. По нынешним временам это уже «зачет».Вл. ГАКОВ. ГЕНЕРАЦИЯ P.S.Данный обзор завершает цикл статей автора об экранизации произведений российских фантастов.ВИДЕОРЕЦЕНЗИИДля хорошего учителя не проблема даже мертвые ученики.Глеб ЕЛИСЕЕВ. ЖИЗНЬ ВНУТРИ ЖИЗНИЕще библейский Иона доказал на собственном примере: жить можно практически где угодно. Были бы желание и… необходимость.Дмитрий ВОЛОДИХИН. «В ОБЩЕМ, ВСЕ УМЕРЛИ…»…или Русский Апокалипсис понарошку и всерьез.Сергей ШИКАРЕВ. РАДОСТИ И ТЯГОТЫОдна из самых загадочных и сложных книг не только в мире НФ, но и в истории современной словесности, наконец добралась до российского читателя.Эдуард ГЕВОРКЯН. ЭПИТАФИЯ ГУТЕНБЕРГУДавнее пророчество Рэя Брэдбери сбывается, однако весьма причудливым образом.РЕЦЕНЗИИНи климатические, ни социальные, ни экономические потрясения не заставят рецензентов оставить свой книжный пост.КУРСОРБудут ли клонированы динозавры? И зачем?ПЕРСОНАЛИИУ них есть уникальный дар — делать нашу жизнь интереснее.ОБРАЩЕНИЕ К ЧИТАТЕЛЯММы провели вместе немало лет. И очень не хочется прощаться.

Вл. Гаков , Журнал «Если» , Сергей Александрович Шикарев , Сергей Некрасов , Эдуард Вачаганович Геворкян

Фантастика / Журналы, газеты / Научная Фантастика / Газеты и журналы / Прочее