跳到主要内容

简介

离线应用程序可以称为离线 Web 应用程序,它是指当客户端与 Web 应用程序的服务器端没有建立连接时,也能够正常在客户端本地使用该 Web 应用程序进行操作。

一直以来,间断性的网络连接一直是网络计算系统致命的弱点,如果应用程序依赖于远程主机的通信,而这些主机又无法连接时,用户就无法正常使用应用程序了。不过当网络连接正常时, Web 应用程序可以保证及时更新,因为用户每次使用,应用程序都会从服务器更新加载数据。

伴随着新一代 HTML 标准 HTML 5 的出现, HTML 5 代表了现在 Web 领域的最新发展方向。在 HTML 5 标准中,加入了新的多样的内容描述标记,直接支持表单验证、视频音频元素、网页元素的拖曳、离线存储和工作线程等功能。

HTML 5 的其中一个新特性就是对离线应用开发的支持,在开发支持离线的 Web 应用程序时,开发者通常需要使用以下三个方面的功能。

离线资源缓存

需要一种方式来指明应用程序离线工作时所需的资源文件。这样,浏览器才能在在线状态时把这些文件缓存到本地。以后,当用户离线访问应用程序时,这些资源文件会自动加载,从而让用户正常使用。 HTML 5 中,通过 Cache Manifest 文件指明需要缓存的资源,并支持自动和手动两种缓存更新方式。

在线状态检测

开发者需要知道浏览器是否在线,这样才能够针对在线或离线的状态,做出对应的处理。在 HTML5 中,提供了两种检测当前网络是否在线的方式。

本地数据存储

离线时需要能够把数据存储到本地,以便在线时同步到服务器上。为了满足不同的存储需求, HTML 5 提供了 DOM Storage 和 Web SQL Database 两种存储机制。前者提供了易用的键 / 值对存储方式,而后者提供了基本的关系数据库存储功能。

离线应用程序存储文件或数据可以避免加载时所需的常规网络请求,如果缓存清单文件是最新的,浏览器就知道自己无须检查其它资源是否更新。目前,许多主流的浏览器都提供了 HTML 5 中离线的支持,除了 HTML 5 中所实现的离线,还有其它的方法(如使用 Gears )也能够实现离线。许多的 Web 应用程序也已经使用到了离线的功能。

  • Gmail : Google 基于网络的邮箱
  • Zoho :在线生产力以及合作应用程序
  • Remember The Milk :在线任务管理系统
  • WordPress :一个开源的个人发布平台

离线缓存与浏览器缓存

一般情况下,使用浏览器缓存在用户磁盘上存储的 Web 单页,在用户再次浏览的时候已节省了带宽,但是即使这样也无法在没有 Internet 的情况下访问 Web 。为了让 Web 应用程序在离线状态时也能够被访问, HTML 5 通过 Application Cache API 提供了离线存储功能,其前提是需要访问的 Web 页面至少被在线访问过一次。

离线是指在没有网络的情况下访问 Web 应用程序,实际上是指访问已经下载的离线文件资源,并且使 Web 应用程序正常运行。离线应用缓存与浏览器缓存有着一定的区别,主要区别如下。

  • 浏览器缓存主要包含两类:缓存协商和彻底缓存

  • 缓存协商( Last-modified , Etag )。浏览器向服务器询问页面是否被修改过,如果没有修改就返回 304 ,浏览器直接浏览本地缓存文件,否则服务器返回新内容

  • 彻底缓存( Cache-control , Expires )。通过 Expires 设置缓存失效时间,在失效之前不需要再跟服务器请求交互

  • 离线存储为整个 Web 提供服务;而浏览器缓存只缓存单个页面

  • 离线应用在离线的状态下仍然可以使用;浏览器缓存依赖于网络而存在

  • 离线存储可以指定需要缓存的文件和哪些文件只能在线浏览;而浏览器缓存则无法指定

  • 离线存储可以动态通知用户进行更新

  • 离线应用主要缓存的是文件,只要设置缓存该文件的页面,都能在离线状态下读取该文件;浏览器缓存主要缓存当前页面的相关内容,也仅限于当前页面的读取

  • 离线缓存是可靠的,开发者可以控制对哪些内容进行缓存,不对哪些内容进行缓存,还可以通过编程控制缓存的更新;而浏览器缓存则不安全、不可靠,开发者不知道在网站中到底缓存了哪些网页,以及缓存了网页上的哪些资源