`
dennislyve
  • 浏览: 2915 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

用HTML5 AppCache运行你的离线web应用 Part I--BY SHWETANK DIXIT 自己翻译的,欢迎交流

阅读更多

用HTML5 AppCache运行你的离线web应用

BY SHWETANK DIXIT · 1 JUL, 2010

原文链接 http://dev.opera.com/articles/view/offline-applications-html5-appcache/ 

介绍

互联网已经成为许多人生活的重要组成,以至于我们无时无刻不在用它们。如果我们即使在断线的时候也能使用他们该有多棒?但直到最近之前(Until recently),都没有什么可行的办法来达成这个目的——然而,在引入W3C HTML5的应用缓存(application cache)特性后,让你的互联网应用在联线和断线状态下都能运行将成为可能。

为什么需要让你的应用离线运行?

每天,互联网应用都在变得越来越复杂,越来越给力。我们可以举出涉及多个领域的可以完成桌面应用功能的互联网应用(比如Google DocsPicasa等)。但是,他们最大的缺陷在于,他们不能离线状态下工作。

这正是HTML5的新离线存储特性的出发点。它力图寻求一种保存文件于缓存的方法,排除这个缺点,让用户在断线情况下,浏览器仍然可以访问到必须的文件。这些文件可以是HTML,CSS,JAVASCRIPT文件,或者其他网站运行所需的资源。

用应用缓存保存你的文件以供离线时使用

HTML5用于离线互联网应用的特性叫做应用缓存(Appplication Cache),或者简称AppCache。存储在AppCache的文件即使在用户断线的时候也可以被应用访问到。你可以在manifest文件里指明这些你需要保存在AppCache里的文件。

AppCache和一般的浏览器缓存的不同

AppCache与一般的浏览器缓存有诸多不同。首先,两者的目的不同。AppCache的目标是特定的WebApp而浏览器缓存则是针对大部分的网页。一般的缓存会保存几乎所有网页,而AppCache只保存在manifest里面指明的页面。并且,一般的缓存是不稳定的,我们不确定哪些页面(以及其中包括的资源)是可用的。

现在,开发人员可以通过AppCache更加编程式的控制缓存,这意味着在离线状态下,对WebApp我们有更高的确定度和控制度。需要特别一提的是,你可以让多个页面分享同一个AppCache。并且,你可以使用API来决定AppCache的状态,然后,甚至让它自动更新。

 

Manifest文件

该文件存放在服务器端,指明那些文件需要保存在客户端。让我们好好看看它是怎么工作的。你可以任意命名manifest文件的名字,但最好让它的后缀名是.manifest。每个manifest文件以CACHE MANIFEST开头,后面你可以列出你想保存的文件。注释可以在行首用#标注。一个简单的例子如下:

 

 

CACHE MANIFEST

#You can also use the CACHE: section header to explicitly declare the following three files.

style.css

script.js

index.htm
 

 

 

Manifest文件必须要有正确的MIME类型:text/cache-manifest。你可以在你服务器上的.htaccess文件上加这么一行来搞定这个问题:

 

AddType text/cache-manifest .manifest
 

 

在HTML里连接manifest文件

现在你已经创建了manifest文件指出需要缓存的文件,下一步就是告诉HTML页面去使用缓存了。为了做到这点,比需要在HTML标签上添加manifest属性,如:

 

<html manifest=”demo.manifest”>
 

如果你的WebApp有多个页面,确定他们都连接了manifest文件,否则他们不会成为AppCache的一部分。

使用段首更好的控制AppCache

我们已经看到了一个很简单的关于如何使用manifest文件的例子。通过是使用段首,我们其实可以精确的指明某个文件是否要被缓存。

明确定义需要被缓存的文件

你可以使用cache段首来明确声明那些文件需要被缓存。例如,前面那个manifest文件可以写成这样,功能不变:

 

CACHE MANIFEST

 

CACHE:

style.css

script.js

index.htm
 

 

唯一的差别是在这个例子里我们明确的声明全部这些文件都会成为AppCache的一部分,这里有个很简单的实例

需要重点说明的是,里面提到文件的路径是相对于manifest文件的路径的。在这个例子里,我们假设这些文件都是和manifest文件在同一个文件夹里的。并且,你可以使用相对路径也可以使用绝对路径。

当文件明确声明在CACHE中,即便你在线,只要manifest文件没有变动,那它们都将从AppCache(而非服务器)中读取,然而,如果浏览器发现一个更新了的manifest文件,新的缓存会再次根据新manifest文件的指示下载相应的文件。所以AppCache可能不适合内容变动很快的网站,比如新闻博客等。但对于专注于某个应用,需要离线工作的WebApp却十分有用(如日历,todo list等)。

如果我要文件绕过缓存直接从服务器下载怎么办?

如果一个页面与一个manifest文件关联,那么只有那些被提到的文件会被尝试读取,无论用户是否在线。然后,也许会存在一些情况你需要一些文件在用户在线的时候绕过缓存,然后从服务器下载最新的文件取代缓存中的文件(比如,一个CGI脚本的动态内容)。

基本上,如果一个页面和manifest文件关联,那所有关于它的文件的网络流量都会被阻隔,于是这些文件要么从AppCache里读取,要么读取失败。而段首NETWORK:给出了这条规则的例外。你可以用段首NETWORK:来声明那些文件不该被缓存,于是它们就会从服务器直接下载,永远不会成为AppCache的一部分。NETWORK:和浏览器的一般缓存头(normal cache header)是分开的,所以如果一个文件应该会被浏览器的一般缓存保存,那即便它被指定在NETWORK:之下,它还是会被那样被保存(跟其他在AppCache中没有指定的文件一样)。

 

CACHE MANIFEST

 

CACHE:

style.css

script.js

index.htm

 

NETWORK:

style2.css
 

 

在上面的例子中,style2.css将总是从服务器下载而不会成为AppCache的一部分。值得注意的是,如果你有太多文件要列在NETWORK:下,你可以用通配符*,这样所有的url都被准许在用户在线的时候从服务器下载文件(译者按:这个通配符的作用应该不只于此吧)。

看一下这个例子。你会注意到当你离线并重新加载页面,页面重新加载了,但背景样式也消失了。这是因为背景样式是写在NETWORK:下的style2.css里面的,于是它不会被保存,只有当你在线并刷新的时候才会加载。

提供后备(fallback)内容

(无良的译者按:鉴于callback叫做回调,我觉得fallback是不是可以叫衰调)

段首FALLBACK:是用来定义后备内容,取代无法读取或者读取不完全的文件:

 

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就会替代它的位置。看下这个manifest文件——如果你访问这个页面,断线,刷新,浏览器会试图加载图片,但因为你不在线(图片也没有被缓存),它不会被读取到,于是备用内容就会取代它的位置(浏览器会首先花点时间读取主要内容,然后才使用备用内容,请耐心等待——译者按:好像没用多少时间)

 

一个提供备用内容给多个图片的例子看这里

 

待续

分享到:
评论

相关推荐

    HTML5离线应用实例介绍

    ApplicationCache(简称AppCache)是HTML5提供的一种离线存储技术,它允许浏览器缓存应用的资源文件,以便在离线状态下使用。 ##### 定义manifest: - **定义方式**:通过在HTML文档头部添加`&lt;html manifest=...

    腾讯X5内核离线使用Demo

    总的来说,“腾讯X5内核离线使用Demo”是一个宝贵的教育资源,可以帮助开发者深入了解离线Web应用的开发,以及腾讯X5内核的高效利用,尤其对于需要在各种网络环境下提供稳定服务的项目具有重要意义。通过深入研究和...

    使用 HTML 5 支持移动 Web 应用程序离线工作

    本文将深入探讨如何使用 HTML5 的离线存储功能来构建支持移动 Web 应用程序离线工作的应用。 离线存储主要是通过两种技术实现的:`AppCache`(Application Cache)和`IndexedDB`。AppCache 提供了一个静态资源的...

    PyPI 官网下载 | django-html5-appcache-0.2.0.tar.gz

    总的来说,`django-html5-appcache`是Django开发中一个实用的工具,它利用HTML5的离线存储特性,使得Web应用可以在没有网络连接的情况下保持部分功能的可用性。对于那些希望提升用户体验,尤其是考虑离线场景的...

    html5离线存储课程代码

    HTML5离线存储是Web应用程序实现离线工作的关键技术,它允许网页在用户离线时仍然可以访问和使用部分数据,极大地提升了用户体验。本课程代码主要围绕这个主题展开,旨在帮助开发者掌握HTML5离线存储的基本原理和...

    前端开发技术分享 浏览器怎么实现 AppCache - Offline Application Cache 共17页.pdf

    离线应用缓存(Application Cache),也称为AppCache,是Web应用程序的一种离线存储机制。它允许开发者通过一个名为`manifest`的特殊文件来指定一系列静态资源,浏览器会根据这个清单文件自动下载并缓存这些资源,...

    HTML5离线缓存技术 附源码.我们知道h5多了很多新技术,其中之一便是可以离线缓存数据,这样当网络断了时,仍然可以浏览网页

    HTML5离线缓存技术是Web开发中的一个重要进步,它使得网页在无网络连接的情况下...通过以上内容,你应该对HTML5的离线缓存技术有了深入的理解,现在你可以尝试创建自己的离线缓存项目,为用户提供更加流畅的浏览体验。

    tomcat7下部署的firefox中配置离线应用搭建相关代码

    离线应用是HTML5引入的一项重要特性,它允许开发者创建可以在用户离线时仍然能运行的应用程序。在本示例中,我们将探讨如何在Tomcat7服务器上部署一个基于Firefox的离线应用,并通过相关代码了解其实现原理。 首先...

    w3c离线html文档

    6. **离线存储与缓存**:通过离线应用缓存(AppCache)和Web存储(包括本地存储和会话存储),开发者可以创建离线工作的Web应用程序。 7. **Canvas和SVG**:元素提供了动态图形绘制的能力,而SVG则支持矢量图,两者...

    基于HTML5 的移动端web 阅读器.zip

    1. **离线存储**:HTML5的离线存储(如AppCache和Service Worker)使得web应用能够在没有网络连接时仍然能够访问部分数据,提高阅读器的离线阅读体验。 2. **本地存储**:Web Storage(包括localStorage和...

    Google_html5_教材

    - **离线存储**:通过 Application Cache 和 IndexedDB,开发者可以让 Web 应用程序在离线状态下也能正常运行。 - **数据库支持**:Web SQL Database 和 IndexedDB 为 Web 开发提供了持久化的数据存储方案。 ##### ...

    HTML5+CSS3移动Web开发实战(第2版)-电子教案.rar

    还有离线存储API(如AppCache和Service Worker)、Web Storage(localStorage和sessionStorage)以及Web Workers和WebAssembly等,都是HTML5为开发者提供的强大工具。 CSS3则是层叠样式表的最新标准,它的出现极大...

    HTML5书籍(HTML5高级程序设计.pdf+深入HTML5应用开发.pdf)

    HTML5是现代网页开发的核心标准,它极大地扩展了Web应用程序的功能性和表现力。这两本PDF书籍,"HTML5高级程序设计"和"深入HTML5应用开发",将为读者提供全面且深入的HTML5知识。 "HTML5高级程序设计"可能会涵盖...

    appcache-nanny:离线优先应用程序的自动更新

    appCache保姆教一些方式的applicationCache douchebag! 众所周知, 。 现在该教一些礼节了– appCache Nanny for Rescue! HTML文件上不再有清单属性。 无论您是否要离线缓存资产,何时启动... You Are In Control:...

    验证html5应用在线升级DEMO

    这个"验证html5应用在线升级DEMO"将帮助你深入理解离线应用的工作原理以及在线升级的过程,通过实际操作,你可以更好地掌握这些概念并应用到自己的项目中。在Test_Offline文件夹中,你会找到相关的HTML、JavaScript...

    HTML5CSS3移动Web开发实战-PPT.zip

    综上所述,"HTML5CSS3移动Web开发实战-PPT.zip"压缩包将引导开发者深入理解HTML5和CSS3在移动Web开发中的应用,帮助他们掌握创建高性能、响应式的移动Web应用的关键技术和策略。通过学习和实践,开发者能够更好地...

    HTML5高仿Win10桌面,可快速开发web界面

    这个项目的核心是利用HTML5的新特性,如Canvas、SVG、WebSocket、离线存储(AppCache)以及媒体元素等,来构建一个具有窗口管理、任务栏、通知中心等功能的Web界面。HTML5的Canvas元素允许开发者通过JavaScript绘制...

Global site tag (gtag.js) - Google Analytics