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

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

Этих проблем можно избежать, сжимая код с помощью Dojo Compressor (alex.dojotoolkit.org/shrinksafe), использующий Rhino (мозилловский JavaScript-движок, написанный на Java) для построения дерева, которое оптимизируется перед работой с файлами. С работой Dojo Compressor справляется неплохо, ресурсов отнимает немного. Расширив наш процесс сборки билда с помощью этого инструмента, мы можем забыть об экономии, писать пространные комментарии, вставлять сколько угодно пробелов и т. д. На рабочем коде это нисколько не отразится.

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


#!/usr/bin/perl

my $data = ‘’;

open F, $ARGV[0] or die «Can’t open source file: $!»;

$data .= $_ while ;

$data =~ s!/*(.*?)*/!!g; # remove comments

$data =~ s!s+! !g; # collapse space

$data =~ s!} !}n!g; # add line breaks

$data =~ s!n$!!; # remove last break

$data =~ s! { ! {!g; # trim inside brackets

$data =~ s!; }!}!g; # trim inside brackets

print $data;

«Скормим» этому скрипту все имеющиеся у нас CSS по очереди:


perl compress.pl site.source.css > site.compress.css

С помощью такой несложной оптимизации мы можем уменьшить объем передаваемых данных на 50 процентов (во многом это зависит от вашего стиля кодирования — выигрыш может быть и гораздо меньше), а значит, увеличить скорость работы конечного пользователя. Но в идеале нам хотелось бы, чтобы пользователи вообще не запрашивали файлы до тех пор, пока это не станет совершенно необходимо. И для этого нам придется заняться HTTP-кэшированием.

Твой друг кэш

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

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


header(«Cache-Control: private»);

Слишком просто, чтобы быть правдой? Ну, в общем-то, да — некоторые агенты порой игнорируют этот заголовок. Чтобы по-настоящему запретить браузеру кэшировать документ, следует быть немного более убедительным:


# ‘Expires’ in the past

header(«Expires: Mon, 26 Jul 1997 05:00:00 GMT»);

# Always modified

header(«Last-Modified: „.gmdate(„D, d M Y H:i:s“).“ GMT»);

# HTTP/1.1

header(«Cache-Control: no-store, no-cache, must-revalidate»);

header(«Cache-Control: post-check=0, pre-check=0», false);

# HTTP/1.0

header(«Pragma: no-cache»);

Это годится для контента, который мы не хотим кэшировать, но если контент не меняется при каждом запросе, нам нужно добиться от браузера обратного поведения. Для этого в заголовке запроса используется конструкция If-Modified-Since. Получив такой запрос, Apache (или любой другой веб-сервер) может выдать код 304 (Not Modified), тем самым сообщая браузеру, что у того в кэше уже находится актуальная версия документа. Благодаря этому механизму, нам не приходится пересылать файл заново, однако лишний запрос обрабатывать все же пришлось. Гм.

Использование entity tags похоже на работу с конструкцией if-modified-since. Apache на запрос к статическому ресурсу может отдавать заголовок Etag, содержащий контрольную сумму, сгенерированную из размера файла, времени последнего изменения и номера индексного дескриптора. Браузер может запросить заголовок файла, чтобы проверить e-tag документа перед загрузкой. Очевидно, что использование e-tag сопряжено с теми же накладными расходами, что и механизм if-modified-since, — клиент все еще вынужден делать лишний HTTP-запрос, чтобы определить валидность локальной копии.

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

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

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

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

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

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

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

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

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

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