Обзор автономных приложений

67

Чтобы просматривать веб-сайт, нужно подключиться к интернету. На сегодняшний день все это знают. Так зачем же тогда нужно рассматривать автономные приложения? Как будто мы собираемся вернуться в прошлое столетие. В конце концов, разве на своем пути к мировому господству веб-приложения не сбросили владычество нескольких поколений автономных настольных приложений?

Осуществление множества разнообразных задач — от записей в социальной сети до покупки книг в интернет-магазине — просто невозможно без подключения к интернету. Но не стоит забывать, что даже веб-приложения не предназначены для обязательного постоянного пребывания в Сети. В них заложена возможность продолжать работу в периоды временного отсутствия подключения к интернету. Иными словами, автономное веб-приложение допускает временные сетевые отказы.

Это обстоятельство имеет особо важное значение для посетителей, пользующихся для доступа к сети портативными устройствами, такими как смартфоны и планшетные компьютеры с возможностью веб-доступа. Чтобы понять суть данной проблемы, представьте себе, что вы работаете с веб-приложением на одном из таких устройств, находясь в поезде, и в это время поезд въезжает в туннель. Шансы велики, что ваше веб-приложение выдаст сообщение о неисправимом сбое и вам придется начать все заново, когда поезд выедет из туннеля и восстановится подключение к интернету.

А вот автономное веб-приложение позволит избежать такого неблагоприятного развития событий. Хотя некоторые возможности могут стать временно недоступными, приложение в основном останется работоспособным. (Опять же, некоторые туннели длиннее других. Амбициозное автономное приложение может продолжать работу на протяжении трехчасового авиарейса или трехнедельного путешествия по Африке, если это то, что вам нужно. По сути, время нахождения в автономном режиме ничем не ограничено.)

Кэширование файлов с помощью манифеста

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

Для создания страницы с возможностью работы в автономном режиме нужно выполнить следующие три шага:

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

  2. Модифицировать веб-страницу, чтобы она обращалась к манифесту. Таким образом, браузер будет знать, что при запросе страницы нужно загрузить файл манифеста.

  3. Настроить веб-сервер. Самое важное — веб-сервер должен предоставлять файл манифеста с правильным MIME-типом.

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

Традиционное кэширование выполняется, когда вместе с запрошенным браузером файлом веб-сервер отправляет дополнительную информацию, которая называется заголовком Cache-Control. Эти заголовки предоставляют браузеру информацию о том, следует ли кэшировать данный файл и на протяжении какого времени использовать котированную копию, прежде чем запрашивать у веб-сервера, не изменился ли этот файл. Обычно, кэшированная копия содержимого веб-страниц хранится короткое время; намного дольше хранятся кэшированные копии ресурсов, используемых вебстраницами, таких как таблицы стилей, изображения и файлы сценариев.

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

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

Создание манифеста

Манифест является центральной частью предоставления автономной работы HTML5. Это текстовый файл, содержащий список файлов, которые нужно кэшировать. Файл манифеста всегда начинается словами (прописными буквами):

CACHE MANIFEST

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

CACHE MANIFEST

MyPage1.html
MyPage2.html

Интервалы (как пустая строка в приведенном примере манифеста) не обязательны, можете вставлять их в любом месте.

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

CACHE MANIFEST
# pages
MyPage1.html
MyPage2.html

# styles & scripts
MyStyle.css
MyScript.js

# pictures # fonts
Images/myimage.jpg
Fonts/my_font.ttf

Обратите внимание на две новые детали в этом манифесте. Первая — несколько строчек начинаются символом #. Эти строчки являются комментариями, предоставляющими информацию относительно типа следующего за ними содержимого. Вторая — для некоторых файлов указаны пути, например Images/myimage.jpg. При условии, что эти файлы находятся на веб-сервере и браузер может иметь доступ к ним, их можно включать в пакет автономного приложения.

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

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

Созданный файл манифеста сохраняется в корневой папке веб-сайта. Ему можно присвоить любое имя, но в настоящее время наиболее популярными расширениями файла являются manifest и appcache.

Первое расширение (например, MyManifest.manifest) было бы наиболее логичным, но оно конфликтует с расширением, используемым на некоторых серверах Windows (как часть процесса развертывания ClickOnce, используемого приложениями .NET). Второе расширение тоже логично, но менее популярно.

В любом случае, главное — нужно настроить веб-сервер, чтобы он распознавал используемое расширение файла манифеста.

Каким может быть объем кэша?

Часто задаваемый вопрос - есть ли какие-либо ограничения на объем кэшируемой информации? Максимальный объем кэша, выделяемого для автономных приложений, варьируется, в зависимости от браузера.

Очевидно, что браузеры на мобильных устройствах находятся на нижнем пределе диапазона. Так как объем хранилища на таких устройствах ограничен, им приходится быть экономными в своем кэшировании. На момент написания этих строк версия браузера Safari для iPad и iPhone ограничивала каждое автономное приложение 5 Мбайт кэша.

Браузеры настольных компьютеров на удивление неоднородны. Firefox по умолчанию выделяет каждому автономному приложению 50 Мбайт кэша, а пользователь может еще повысить этот предел. (Пользовательские параметры кэша в Firefox можно установить на вкладке Network в окне, открываемом после выбора последовательности команд меню Tools --- Options --- Advanced.)

А вот браузер Chrome выделяет каждому автономному приложению ничтожные 5 Мбайт кэша, обойти которое можно либо с помощью специализированного приложения Chrome, либо изменением настроек браузера. Разработчики браузера Chrome планируют в будущем устранить это ограничение и предоставить пользователям явный контроль над параметрами кэша для каждого автономного приложения, но на данном этапе 5 Мбайт — это все, что они получают.

К сожалению, этот неоднородный подход к выделению кэша браузерами представляет проблему. Например, автономное приложение, требующее больше чем 5 Мбайт кэша, будет работать без проблем в браузере Firefox, но не в Chrome. Что еще хуже, при посещении вашего сайта пользователем Chrome этот браузер будет пытаться кэшировать приложение, но не сможет этого сделать по причине ограничения, после чего просто выбросит все загруженные данные. Это не только тратит впустую время и трафик, но также не предоставляет пользователю никакой возможности работать в автономном режиме. Он просто не сможет использовать ваше приложение до тех пор, пока не подключится к интернету.

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

Браузерная поддержка автономных приложений

К этому времени вы, наверное, уже поняли, что автономные приложения поддерживаются всеми основными браузерами, за обычным исключением — Internet Explorer. Поддержка распространяется на несколько версий назад, что практически обеспечивает возможность пользователей браузеров Firefox, Chrome и Safari исполнять автономные приложения. Минимальные версии основных браузеров, поддерживающих автономные приложения, перечислены в таблице:

Браузерная поддержка автономных приложений
Браузер IE Firefox Chrome Safari Opera Safari iOS Android
Минимальная версия - 3.5 5 4 10.6 2.1 2

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

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

Браузеры, не поддерживающие автономных приложений, все равно будут работать с такими сайтами, только будут требовать для этого подключения к интернету. А пользователи, нуждающиеся в возможности автономной работы с сайтом, например, те, кто часто путешествуют, откроют для себя, насколько это ценно пользоваться браузером иным, чем Internet Explorer.

Пройди тесты
Лучший чат для C# программистов