Статьи

Уменьшите время загрузки ваших страниц, один год спустя

Более года назад я писал о времени загрузки страниц и Jawr . С тех пор либо мои проекты были приложениями для внутренней сети, где время загрузки не было проблемой, либо мы не имели права голоса в используемых инструментах. Поэтому у меня не было возможности использовать какие-либо инструменты, которые я нашел тогда. Теперь я скоро столкнусь с приложением, которое будет использоваться людьми вне нашей сети, и я определенно хочу, чтобы приложение было максимально отзывчивым. Вооружившись моими предыдущими лучшими практиками Yahoo , я искал в Интернете инструменты, которые могли бы помочь в их применении.

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

<button><img src="path/to/my/image" />Label</button>

Это означает, что любой экран, отображающий более одного типа кнопок, может быть медленным. Один из способов значительно уменьшить количество запросов — объединить все изображения в одно и использовать фоновые изображения CSS. Последний доступен начиная с первой версии CSS, просто укажите атрибут background-image, чтобы отобразить изображение позади элемента. Это использование называется CSS Sprites . Код теперь выглядит так:

<button class="update">Label</button>
button.update {
background-image: url('path/to/my/image');
background-repeat: no-repeat;
}

Проницательный читатель заметит, что предыдущий код имеет тот же эффект, что и <img> в <button>. Реальное использование состоит в том, чтобы использовать только ту часть главного изображения, которую мы хотим, что-то похожее на это:

button.update {
background: transparent url('path/to/my/aggregate') -50px -50px no-repeat;
}

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

Логотип SmartSpritesК счастью, мой старый друг Джавр имеет право помочь мне. Начиная с версии 3.2, он включает в себя SmartSprites , продукт, который просто выполняет всю агрегацию и вычисления для меня. Как это работает? Просто добавив несколько комментариев в ваш CSS:

  • объявить, как будут построены главные (ие) изображения (и)
  • сказать, какой спрайт будет участвовать в каком мастер-образе
/** sprite: master-sprite-gif; sprite-image: url('../img/master-sprite.gif'); sprite-layout: vertical */

button.one {
background-image: url('../img/certificate_preferences.gif'); /** sprite-ref: master-sprite-gif; */
}

button.two {
background-image: url('../img/inbox_into.gif'); /** sprite-ref: master-sprite-gif; */
}

button.three {
background-image: url('../img/mail_forward.gif'); /** sprite-ref: master-sprite-gif; */
}

Предыдущий CSS является примером, с помощью которого все три GIF-файла будут найдены во время выполнения в ../img/master-sprite.gif. Если вы посмотрите на сгенерированный CSS, он будет выглядеть следующим образом:

button.one{background-image:url('../cb3648025844/img/master-sprite.gif');background-position:left -0px;}
button.two{background-image:url('../cb3648025844/img/master-sprite.gif');background-position:left -48px;}
button.three{background-image:url('../cb3648025844/img/master-sprite.gif');background-position:left -96px;}

Конечно, реальный сгенерированный CSS будет конкатенирован и минимизирован (см. Ниже).

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

Тем не менее, Jawr также предоставляет некоторые очень интересные функции, как старые, так и новые:

  • минимизация, как для CSS, так и для JavaScript. Вы также можете выбрать минимизирующий движок (встроенный, JSMin или YUI Compressor ). Последний даже может запутать ваш источник, тем самым даже делая ваш JS еще легче в процессе
  • включение лицензии, так что даже минимизированные источники могут отображать свою лицензию
  • сжатие GZip во время выполнения, если браузер клиента его поддерживает
  • HTTP-заголовок управления, так что запросы на одни и те же ресурсы (кроме первого) будут отвечать HTTP 304 — не модифицированный код, что позволяет избежать ненужного сетевого трафика
  • управление i18n для использования стандартных файлов свойств Java для интернационализированных сообщений в вашем JavaScript
  • JavaScript для использования Jawr без taglibs на простых HTML-страницах (хотя это не рекомендуется, поскольку добавляет скрипт на страницу, таким образом, другой HTTP-запрос)
  • возможность расширения, с новыми пре- и постпроцессорами
  • возможность переключения между режимом разработки (без изменений для ресурсов) и производством (виртуальные ресурсы, обслуживаемые Jawr)
  • предварительная обработка пакета, так что обработка выполняется не при запуске, а во время сборки: это можно сделать, вызвав задачу Ant или настроив плагин Maven
  • для действительно занятых администраторов серверов приложений, поддержка JMX

В течение прошлого года, кажется, Jawr получил несколько хороших улучшений. Я не знаю, сколько людей действительно используют его, но я думаю, что он заслуживает некоторого интереса, когда вам нужно оптимизировать производительность на фронте времени загрузки страницы.

Вы можете скачать исходники этой статьи в формате Eclipse / Maven здесь .

От http://blog.frankel.ch/decrease-your-pages-load-time-2