Javascript本地储存(3):离线web应用

简介:

  前两篇文章分别介绍了Cookie应用另一种本地储存方式,无论是cookie、userData还是localStorage都是一段保存在客户端磁盘的一段文本,他们可以被主动删除,但是本文要讲的“应用程序缓存”是HTML5中新增的一个技术,他允许web应用将应用程序自身本地保存到用户的浏览器中,他是不会随着用户清楚浏览器缓存而被清除的。

不像localStorage和sessionS只是保存web应用程序相关的数据,他是将应用程序本身保存起来——应用程序所需运行的所有文件(HTML、CSS、JavaScript、图片等)。——《Javascript权威指南(第六版)》Page-594

  “应用程序缓存”真正意义上不是“”缓存,更好的说法应该称之为“应用程序存储”。

 

Introduction [简单介绍]

  通过在应用程序主HTML页面的<html>标签中设置manifest属性,只想到清单文件就行了。这里的清单文件就是,将要缓存的文件列表。

<!DOCTYPE HTML>
<html manifest="myapp.appcache">
  <head>...</head>
  <body>...</body>
</html>

  清单文件格式也是有要求的,他的杭寿必须以“CACHE MANIFEST”字符串开始,其余就是要缓存的文件URL列表,一行一个URL。

CACHE MANIFEST
#上一行表示此文件是一个清单文件。本行为注释

#下面的内容都是应用程序依赖的资源文件的URL
myapp.html
myapp.js
myapp.css
images/backgorund.png

  有人可能会问了:那清单文件一定要以appcache作为未见的扩展名么?
答案是否定的,web服务器真正识别清单文件的方式是通过"text/cache-manifest"这个MIME类型的一个清单。如果服务器将清单文件的Content-Type的头信息设置成其他MIME类型,那就不会缓存应用程序了,因此,肯呢过需要对web服务器做一定的配置来使用这个MIME类型,比如在web应用目录下创建Apache服务器的一个.htaccess文件。

More [更多介绍]

1.复杂的清单

  先给个清单:

CACHE MANIFEST

CACHE:
myapp.html
myapp.css
myapp.js

FALLBACK
video/ offline_help.html

NETWORK:
cgi/

  "CACHE"应该是不用细说了。
"NETWORK": 标识了该URL中的资源从不缓存,总要通过网络获取。
"FALLBACK":区域中的清单项每行都包含两个URL,第二个URL是指需要加载和存储在缓存中的资源,第一个URL是一个前缀。任何能够匹配到这个前缀的URL都不会缓存起来,但是可能的haunted,他们会从网络中载入。如果从网络中载入这样一个URL失败的话,就会使用第二个URL指定的缓存资源来代替,从缓存中获取。

  想想一个web应用包含一定数量的视频教程,这些视频都很大,显然把他们缓存在本地是不合适的,因为,在离线状态心爱,通过清单文件中的fallback区域,就可以使用一些急于文本的帮助文件来代替了。

2.缓存的更新

CACHE MANIFEST
# MyApp version 1 (更改这个数九就可以让浏览器重新下载这个文件)
Myapp.html
Myapp.js

  浏览器在检查清单文件以及更新缓存的操作是异步的,可能是在从缓存中载入应用之前,也可能同时进行。
浏览器在更新缓存过程中会触发一系列事件,可以通过注册处理程序来跟踪这个过程同时提供反馈给用户。如下:

applicationCache.onupdateready = function(){
    var reload = confirm("发现一个新版本,需要刷新页面,点击确定刷新。");
    if(reload) locatiuon.reload();
}

  注:只有支持应用程序缓存的浏览器才会有applicationCache属性,当然除了上面例子的updateready时间之外,还有其他7中应用程序缓存时间可以监控。

var appCache = window.applicationCache;

function logEvent(e) {
    console.log(e);
}

function logError(e) {
    console.log(“error ” + e);
};

appCache.addEventListener(‘cached’, logEvent, false);
appCache.addEventListener(‘checking’, logEvent, false);
appCache.addEventListener(‘downloading’, logEvent, false);
appCache.addEventListener(‘error’, logError, false);
appCache.addEventListener(‘noupdate’, logEvent, false);
appCache.addEventListener(‘obsolete’, logEvent, false);
appCache.addEventListener(‘progress’, logEvent, false);
appCache.addEventListener(‘updateready’, logEvent, false);

 

Related blog [相关博文]

  JavaScript本地储存(1):cookie在前端

  JavaScript本地储存(2):userData和localStorage 

 

Reference [参考资料]

  1.《JavaScript权威指南(第六版)》—— 淘宝团队翻译   当当

  2. other







本文转自Barret Lee博客园博客,原文链接:http://www.cnblogs.com/hustskyking/archive/2013/03/30/javascript-applicationcache.html,如需转载请自行联系原作者

目录
相关文章
|
7天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
23天前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
169 3
|
28天前
|
JavaScript 前端开发 测试技术
使用Selenium执行JavaScript脚本:探索Web自动化的新领域
本文介绍了如何在Selenium中使用JavaScript解决自动化测试中的复杂问题。Selenium的`execute_script`函数用于同步执行JS,例如滑动页面、操作时间控件等。在滑动操作示例中,通过JS将页面滚动到底部,点击下一页并获取页面信息。对于只读时间控件,利用JS去除readonly属性并设置新日期。使用JS扩展了Selenium的功能,提高了测试效率和精准度,适用于各种自动化测试场景。
40 1
|
24天前
|
JavaScript 前端开发 算法
js开发:请解释什么是虚拟DOM(virtual DOM),以及它在React中的应用。
虚拟DOM是React等前端框架的关键技术,它以轻量级JavaScript对象树形式抽象表示实际DOM。当状态改变,React不直接操作DOM,而是先构建新虚拟DOM树。通过高效diff算法比较新旧树,找到最小变更集,仅更新必要部分,提高DOM操作效率,降低性能损耗。虚拟DOM的抽象特性还支持跨平台应用,如React Native。总之,虚拟DOM优化了状态变化时的DOM更新,提升性能和用户体验。
20 0
|
1天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
1天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
5天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
13天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
20天前
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
11 1
|
28天前
|
前端开发 JavaScript 安全
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
71 0