Статьи

Погружение глубже в автономный просмотр HTML5

Недавно я опубликовал статью об одной из новых функций в HTML 5, которая называется « Автономный просмотр в HTML5 с помощью ApplicationCache» .

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

  • как решить, какие файлы кешировать
  • последствия кэширования этих файлов
  • отладка ApplicationCache

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

Давайте углубимся в то, какие ресурсы вы и не должны добавлять в ApplicationCache.

Что вы должны кэшировать?

Технически добавление и удаление ресурсов из ApplicationCache несложно. Вы указываете, какие ресурсы вы хотите кэшировать в разделе CACHE: и все.

Иногда трудным решением является то, какие ресурсы вы должны и не должны добавлять в ApplicationCache.

Для меня очевидными ресурсами для кеширования являются следующие:

  • CSS файлы
  • Файлы JavaScript
  • Картинки
  • видео

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

А как насчет работы с удаленными файлами и как с ними обращаться? Хорошо, когда вы работаете с удаленными файлами, у этой истории есть две стороны.

Если веб-сайт не работает по протоколу SSL, удаленные ресурсы можно кэшировать. В следующем сценарии локальные ресурсы, а также удаленная библиотека jQuery добавляются в ApplicationCache.

  Манифест кэша

 # Создано 20 октября 2011
 КЭШ:
 clock.css
 clock.js

 # Кеширование удаленного файла
 http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js 

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

Смущенный? Я бы хотел, чтобы все браузеры играли по одинаковым правилам.

Давайте вернемся к решению, какие ресурсы следует или не следует кэшировать.

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

Вот тут-то и начинается разработка плана. Если вы кэшируете эти страницы и пользователь не в сети, вам нужно будет сохранить данные пользователя в другом месте. Это местоположение может быть чем-то вроде куки или вы можете хранить его в localStorage . Это еще одна отличная область HTML5!

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

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

Тогда что вы не должны кэшировать?

Очевидные варианты не кэширования:

  • страницы, которые взаимодействуют с хранилищем базы данных
  • страницы, которые взаимодействуют с веб-сервисами
  • страницы, требующие аутентификации

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

Отладка манифеста кэша

Теперь у вас есть ресурсы в кеше, как вы узнаете, что там, если вам когда-нибудь понадобится отладить его?

К счастью, в Google Chrome есть адрес, по которому вы можете перейти, чтобы просмотреть кеш. chrome://appcache-internals к chrome://appcache-internals в Chrome открывает страницу внутренних компонентов AppCache .

FIG1

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

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

Что мне не нравится в ApplicationCache

Как бы хорош ни был ApplicationCache, в этом есть вещи, которые мне не нравятся.

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

Еще один побочный эффект использования ApplicationCache — использование кэшированных файлов по сравнению с тем, когда они не используются. Возьмем, к примеру, страницу с именем default.html . Если эта страница кэшируется, даже если пользователь в сети, он будет использовать этот файл. Так как же вы уведомите браузер об обновлении кеша? Вы должны уведомить пользователя, и страница должна быть обновлена. Мы живем в мире, где Ajax является нормой. Там должен быть лучший способ.

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

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

  • Настольный браузер Safari (Mac и Windows) не имеет ограничений
  • Mobile Safari имеет ограничение в 10 МБ
  • Chrome имеет ограничение 5 МБ
  • У браузера Android нет ограничений по размеру ApplicationCache
  • У рабочего стола Firefox неограниченный размер ApplicationCache
  • Пользователь может управлять лимитом ApplicationCache, но его размер по умолчанию составляет 50 МБ.

Подтверждение манифеста

Файл манифеста легко создать, а еще проще ошибиться.

Неправильная ссылка на файлы вызовет у вас головную боль. К счастью, существует Cache Manifest Validator, который может помочь облегчить отладку ошибок в вашем файле манифеста. Это отличный инструмент, поэтому, пожалуйста, добавьте его в закладки и используйте.

Принеси это вообще

Последняя мысль. Большая часть моей работы сосредоточена на работе с крупными корпоративными клиентами. Как только приложение отключено, начинают звучать сигналы тревоги! Там должна быть проблема.

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