Читаем Журнал «Компьютерра» № 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-запрос, чтобы определить валидность локальной копии.

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

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

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

Тони Фаделл возглавлял команды, создавшие 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