Шветанк Диксит · 1 июля 2010 г.
Приложения Web стали существенной частью жизни людей в такой степени, что многие используют их все время. Не будет ли полезно, если мы сможем использовать их, даже когда не подключены к сети? До недавних пор не существовало никакого способа это сделать – однако, с появлением в W3C HTML5 кэша приложений (http://dev.w3.org/html5/spec/offline.html), стало возможно выполнение приложения Web в автономном режиме, также как и в сети. Давайте посмотрим, как это реализуется.
Приложения Web становятся с каждым днем все сложнее и мощнее. Существует множество примеров приложений web в различных областях выполняющих такую же работу, как и настольные приложения (подумайте о Google Docs, Picasa, и т.д.). Однако один существенный недостаток состоит в том, что они не могут работать, когда пользователь не соединен с Интернет.
Здесь на сцене появляется новое автономное хранилище HTML5. Оно пытается избавиться от этого недостатка, определяя метод сохранения файлов в кэш-памяти, чтобы когда пользователь не подключен к сети, браузер имел, тем не менее, доступ к необходимым файлам. Это могут быть файлы HTML, CSS или JavaScript, или любые другие ресурсы необходимые сайту для работы.
HTML5 для автономных приложений web использует новое средство, называемое кэшем приложений, или коротко AppCache. Сохраняемые в этом AppCache файлы доступны для приложения, даже когда пользователь не находится в сети. С помощью файла
Существует ряд особенностей, которые отличают AppCache от обычного кэша браузера. Прежде всего, они решают различные задачи. AppCache предназначен для подходящих приложений Web, в то время как кэш браузера предназначен вообще для обычных страниц web. Обычная кэш-память будет кэшировать почти любую страницу, в то время как AppCache будет кэшировать только те страницы, которые специально указаны в файле
Преимущество использования AppCache состоит в том, что теперь разработчик имеет значительно больше программного контроля над кэшем, что означает значительно больше уверенности и контроля над тем, как приложения Web будут вести себя в автономном режиме. Отметим также, что можно иметь несколько страниц, совместно использующих одну память AppCache. Также с помощью AppCache можно использовать API для определения состояния памяти AppCache, и затем даже заставить ее обновиться.
Этот файл находится на сервере и указывает, какие файлы должны храниться на клиентской стороне в AppCache браузера, готовые к тому, что пользователь переходит в автономный режим. Давайте рассмотрим подробнее, как он работает.
Для файла
.manifest. Каждый файл CACHE MANIFEST, после чего перечисляются файлы, которые желательно сохранить и сделать доступными для автономного использования. Можно задавать комментарии, помещая # в начале строки. Очень простой файл
CACHE MANIFEST #Можно также использовать заголовок раздела CACHE:, #чтобы явно объявить три следующих файла. style.css script.js index.htm
Файл text/cache-manifest. Чтобы сделать это, можно задать расширение .manifest для файла .htaccess на сервере:
AddType text/cache-manifest .manifest
Теперь, после создания файла
manifest в тег <HTML> страницы. Например:
<html manifest="demo.manifest">
Если приложение Web имеет более одной страницы, необходимо сделать так, чтобы все страницы соединялись с файлом
До сих пор мы видели самый простой пример использования файла
Можно использовать CACHE: для явного объявления, какие файлы необходимо кэшировать. Например, предыдущий пример файла
CACHE MANIFEST CACHE: style.css script.js index.htm
Единственное различие состоит в том, что в этом примере мы явно объявили, что все эти файлы будут частью кэша приложений.
Вот очень простой пример страницы, которая использует CACHE: (http://people.opera.com/shwetankd/demos/2/index.htm).
Важно отметить, что указанный для файлов
Файлы, определенные как часть CACHE:, будут загружаться из AppCache (а не с сервера), даже если вы находитесь в сети, при условии, что в файле
Если страница связана с файлом
По сути, если страница связана с файлом NETWORK: делает исключения для этого правила. Можно использовать раздел заголовка NETWORK: для объявления, какие файлы не должны кэшироваться, чтобы они загружались с сервера, и никогда не были частью кэша приложений. Раздел заголовка NETWORK: принимает во внимание заголовок обычного кэша браузера. Поэтому, если предполагается, что файл будет кэшироваться обычным кэшем браузера, то он и будет им кэшироваться (также как и любой другой файл, не определенный в AppCache), даже если он определен под заголовком раздела NETWORK:.
CACHE MANIFEST CACHE: style.css script.js index.htm NETWORK: style2.css
В примере выше style2.css всегда будет загружаться с сервера и никогда не будет частью кэша приложений. Помните, что могут быть ситуации, когда имеется слишком много файлов для перечисления, которые не должны использовать кэш, что делает запись всех этих файлов под заголовком раздела NETWORK: обременительным. В этом случае можно использовать символ звездочки (*), что разрешает всем URL выходить в сеть, если вы находитесь в сети.
Посмотрите на пример, который использует файл NETWORK: (http://people.opera.com/shwetankd/demos/3/index.htm). Можно заметить, что когда вы не в сети и перезагружаете страницу, страница перезагружается, но оформление фона исчезает. Это связано с тем, что оформление фона в этом примере находится в файле style2.css, который находится под заголовком раздела NETWORK:, что означает, что он не кэшируется и будет загружаться, только когда вы в сети и перезагружаете страницу.
Раздел заголовка
CACHE MANIFEST CACHE: style.css script.js index.htm NETWORK: style2.css FALLBACK: main_image.jpg backup_image.jpg
Предполагается, что резервный контент будет кэшироваться и будет использоваться только в том случае, когда основной контент не загружается. В приведенном выше примере файл backup_image.jpg кэшируется в AppCache, поэтому когда файл main_image.jpg не может загрузиться, на его место будет загружаться backup_image.jpg.
Посмотрите пример с резервной копией
Файл
Одним из больших достоинств кэша приложений является то, что теперь программист имеет доступ к тому, как себя должен вести кэш. Он имеет доступ к событиям, которые могут сообщить о текущем состоянии кэша приложений, и имеет также функции для асинхронного обновления. Например, можно использовать функцию window.applicationCache, чтобы определить, поддерживает браузер кэш приложений или нет. Давайте посмотрим на некоторые другие способы, которыми можно получить программный контроль над кэшем приложений.
Текущий статус кэша приложений можно проверить с помощью функции window.applicationCache.status, которая возвращает числовое значение, соответствующее следующим статусам:
0 - uncached (не кэшировано)
Если страница не соединена с кэшем приложений. Также при самой первой загрузке кэша приложений и во время загрузки AppCache будет иметь статус uncached.
1 – idle (не работает)
Когда браузер имеет самую последнюю версию AppCache, и нет обновленных версий для загрузки, то статус задается как Idle.
2 – checking (проверка)
В течение времени, когда страница проверяет наличие обновленного файла Checking.
3 – downloading (загрузка)
В течение времени, когда страница фактически загружает новый кэш (если был обнаружен обновленный файл downloading
4 – updateready (обновление готово)
Когда браузер заканчивает загрузку нового кэша, он готов к использованию (но все еще не используется). В течение этого времени статус задается как updateready
5 – obsolete (устарел)
Когда файл obsolete, и кэш приложений удаляется. Важно знать, что когда файл
В зависимости от того, что происходит с AppCache в данный момент, могут порождаться также некоторые события.
Checking (проверка)
Это событие порождается, когда браузер выполняет проверку, пытаясь загрузить манифест в первый раз, или проверяет, что имеется обновленная версия файла
Noupdate (нет обновления)
Если на сервере отсутствует обновленная версия файла noupdate.
Downloading (загрузка)
Если браузер загружает кэш в первый раз, или загружает обновленную версию, порождается это событие.
Это событие порождается для каждого файла, который загружается как часть AppCache.
Cached (кэшировано)
Это событие порождается, когда все ресурсы закончили загрузку, и приложение будет кэшировано.
Updateready (обновление готово)
Когда ресурсы закончили перезагрузку обновленного кэшированного файла, вызывается updateready. Когда это произошло, можно использовать swapCache() (как объясняется далее в статье), чтобы заставить браузер использовать этот вновь обновленный кэш.
Obsolete (устарел)
Это событие порождается, если файл
Error (ошибка)
Это событие может порождаться по различным причинам. Если файл
Все обработчики событий для этих событий имеют префикс 'on'. Например, onchecking, onupdateready, onerror, и т.д.
API кэша приложений имеет несколько особенностей, которые стоит упомянуть:
window.applicationCache.update(): Эта функция будет запускать процесс загрузки кэша приложений, который является почти тем же, что и перезагрузка страницы. Она просто проверяет, изменился ли манифест, и, если возможно, загружает свежую версию всего контента в кэше (учитывая все заголовки кэша). Отметим, что даже хотя при этом создается новый кэш, страница будут продолжать использовать старый кэш. Чтобы заставить страницу использовать только что загруженный новый кэш, необходимо использовать функцию swapCache().
window.applicationCache.swapCache(): Эта функция приказывает браузеру начать использовать данные нового кэша, если он доступен. Важно отметить, что даже если имеется новый файл swapCache(). Когда вызывается swapCache(), кэш будет использоваться, как определено в новом файле
Обычно не требуется использовать функцию update(), так как браузер должен автоматически делать это при перезагрузке страницы. Наиболее часто функцию swapCache() будет использоваться в соединении с событием onupdateready (обновление готово).
В следующем примере, если изменить файл swapcache() ):
<html manifest="demo.manifest">
<head>
<script type="text/javascript">
window.applicationCache.addEventListener('updateready', function(){
window.applicationCache.swapCache();
}, false);
</script>
</head>
<body>
...
</body>
</html>
Если созданная страница вряд ли будет перезагружаться пользователем в течение какого-то времени, то можно было бы периодически вызывать функцию update(), чтобы проверять наличие обновлений файла swapcache() на событии updateready, чтобы загрузить и переключиться на новый кэш:
setInterval(function () { window.applicationCache.update(); }, 3600000); // Проверять обновления файла .
window.applicationCache.addEventListener('updateready', function(){
// когда обновленный кэш загрузится и будет готов для использования
window.applicationCache.swapCache();
//переключитесь на самую новую версию кэша
}, false);
Этот код будет проверять наличие обновленной версии файла updateready, сообщающее, что обновленная версия кэша закончила загружаться и готова к использованию. Затем можно явно использовать функцию swapCache(), чтобы переключиться со старого кэша на новый, только что загруженный.
Таким образом можно гарантировать, что кэш пользователя будет оставаться обновленным.
Введение кэша приложений W3C HTML5 (http://dev.w3.org/html5/spec/offline.html) предоставляет множество новых возможностей для разработчиков web. Приложения Web могут теперь кэшироваться для автономного использования, делая тем самым их еще более мощными и полезными чем раньше.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.