...

пятница, 9 августа 2013 г.

[Из песочницы] Frontend оптимизации

Frontend оптимизации

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



1. Работа с IE



Нередко случается, что для IE версии до 9 приходится писать другой код. Для этого обычно используется следующий метод: объявляется глобальная переменная (скажем, isIE) и далее в зависимости от ее значения выполняется различный код.

if (isIE)
{
//Код для IE
}
else
{
//Код для остальных браузеров
}


Для решения этой проблемы порой рациональнее делать так:



//Все функции, объекты etc
<script src="main.js"></script>
<!--[if lt IE 9]>
//Те функции, объекты etc, которые в IE надо изменить
<script src="ie.js"></script>
<![endif]-->


В этом случае другие браузеры не будут грузить тот код, что предназначен для IE, да и редактирование кода, ИМХО, удобнее.


2. Разные виды кавычек



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

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

//Интерпретатору: вот тебе строка, распарси ее
element.innerHTML="<a href=\"/help/\" class=\"help-link\" target=\"_blank\">Помощь</a>";
//Интерпретатору: вот тебе готовая строка, ничего делать не нужно
element.innerHTML='<a href="/help/" class="help-link" target="_blank">Помощь</a>';


3. Gzip



Сжатие данных «на лету» — хорошая вещь, но зачем каждый раз сжимать одни и те же данные? В nginx (а он как правило и используется в большинстве случаев) есть модуль gzip_static.

Работает он следующим образом:

Допустим, поступил запрос на файл script.js

Nginx проверяет, есть ли в этой же папке файл script.js.gz и, если есть, добавляет заголовок Content-encoding: gzip и отправляет содержимое .gz-файла.

Включается этот модуль следующим образом: в nginx.conf добавляется строка gzip_static on;

Из минусов можно отметить только то, что при каждом изменении файла нужно пересоздавать .gz-файл.


4. Appcache



Appcache представляет собой кэширование заданных файлов в браузере, доступ к которым будет доступен при отсутствии подключения к сети. К примеру, если на example.com/help.html используется appcache, то при отсутствии подключения у пользователя откроется страница example.com/help.html, а example.com не откроется.

Это будет удобно для тех страниц, просмотр которых не требует подключения к сети. К примеру, это может быть документация, помощь, web-приложения и игры.

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

При загрузке страницы браузер вначале скачает файл манифеста, если тот не доступен (нет сети), то браузер выполнит код из FALLBACK-части, если файл доступен и не изменился с прошлой загрузки, то браузер не будет перезапрашивать страницу(!). Если файл изменен, то браузер загрузит заново все файлы из манифеста.

Как тогда быть с обновлениями? Если контент на странице изменился, нужно изменить содержимое файла манифеста. В манифесте поддерживаются комментарии, начинающиеся с символа #, в комментарии можно указывать, например, дату изменения или номер версии.

Как устроен файл манифеста: это простой текстовый файл с расширением .appcache, который имеет следующий вид:



CACHE MANIFEST
index.html
logo.png
style.css
script.js
offline.js
NETWORK:
*
FALLBACK:
server.js offline.js


Включается манифест в html следующим образом: к тегу html добавляется атрибут manifest с адресом файла манифеста.

Пример: Первая строка — начало манифеста. Регистр должен быть верхним. Далее идут имена файлов, которые нужно хранить в кэше, каждый файл с новой строки. Затем, после NETWORK: объявляются те файлы, которые нужно грузить по сети (если этот пункт не писать вообще, то другие файлы, например счетчики посещений, не загрузятся даже при наличии сети). В FALLBACK модуле описывается, какой файл грузить в случае невозможности загрузки первого. В описанном примере при невозможности загрузки файла server.js будет взят из кэша файл offline.js, который сообщит пользователю, что для полного функционала требуется подключение к сети.


Примеры сайтов, использующих Appcache: jsconsole.com, reshix.ru.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий