了解HTML5和“她”的 API (三)

  Web Workers(后台线程)

  JavaScript是单线程的,较长的javascript运算会阻塞UI线程。

  web worker 是运行在后台的 JavaScript,不会影响页面的性能。

  在web worker中执行的脚本不能访问 window对象 document对象 parent对象。

  web worker 一般用于更耗费 CPU 资源的任务。

  检测 Web Worker 支持

//检测浏览器是否支持Web Worker
if(typeof(Worker) !== "undefined"){
	//支持Web Worker
	console.log(‘支持Web Worker‘)
}else{
	//不支持
	console.log(‘不支持Web Worker‘)
}

  创建 web worker

var worker = new Worker(‘demoworkers.js‘);
worker.onmessage = function (e){
    console.log(e.data);
};

//demoworkers.js
!function(){
    var i = 0;
    (function(){
        postMessage(++i);
        setTimeout(arguments.callee,1000);
    })();
}();

  创建好web worker后,一般结合postMessage API来发送和接收消息。

   终止 Web Worker

worker.terminate();

  Web Storage(本地存储)

  以前,在客户端存储数据是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。

  Web Storage API提供了两种在客户端存储数据的方法 

localStorage - 存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用
sessionStorage - 针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。

  检测浏览是否支持Web Storage

//localStorage
if(window.localStorage){
	//支持
}else{
	//不支持
}
//sessionStorage
if(window.sessionStorage ){
	//支持
}else{
	//不支持
}

  设置和获取数据

//设置一个值
localStorage.setItem(‘oneKey‘,‘oneValue‘);
localStorage.oneKey = ‘oneValue‘;

sessionStorage.setItem(‘oneKey‘,‘oneValue‘);
sessionStorage.oneKey = ‘oneValue‘;

//获取一个值
localStorage.getItem(‘oneKey‘);
localStorage.oneKey;

sessionStorage.getItem(‘oneKey‘);
sessionStorage.oneKey;

  Storage 属性和方法

length //storage对象中存储的键/值对的数量
key(index) //获取指定位置的对象
getItem(key) //获取指定键的值 如果没有则返回null
setItem(key,value) //设置一个值到指定键的位置,如果已经存在则替换
removeItem(key) //删除指定键的值
clear() //清除storage对象中存储的所有数据

  在一些复杂的情况下,多个网页、标签页或者worker都需要访问存储的数据,应用程序会在存储数据被修改后触发一系列操作。在这种情况下,web storage API提供了一套事件通知机制。

window.addEventListener(‘storage‘,displayStorageEvent,true);
function displayStorageEvent(e){
	//e.key 更新或删除的键
	//e.newValue 更新前键对应的值
	//e.oldValue 更新后键对应的值
	//e.url storage事件发生的源
	//e.storageArea 指向值发生改变的localStorage(或sessionStorage)的一个引用
}

  Application Cache(应用缓存)

  应用程序缓存意味着web应用可进行缓存,并可在没有因特网连接时进行访问。

   应用程序缓存为应用带来三个优势

离线浏览 - 用户可在应用离线时使用它们
速度 - 已缓存资源加载得更快
减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。

  检测浏览器是否支持应用缓存

if(window.applicationCache){
	//支持
}else{
	//不支持
}

  启用应用程序缓存需在文档的 <html> 标签中包含 manifest 属性

 <html manifest="offline.appcache">

  manifest 文件需要配置正确的 MIME-type,即 "text/cache-manifest",必须在 web 服务器上进行配置

如果使用的是Apache 服务器,需要修改一下.htaccess 文件,追加一行代码:
AddType text/cache-manifest .manifest
这样就保证了.manifest 文件拥有正确的MIME 类型,即text/cache-manifest。
在.htaccess 文件中还可以加入以下代码:
<Files offline.manifest>
	ExpiresActive On
	ExpiresDefault "access"
</Files>
添加上面这几行代码,可以阻止浏览器缓存缓存文件。
因为offline.manifest是一个静态文件,浏览器默认就会缓存offline.manifest文件。
所以上面这几行代码就是让服务器告诉浏览器不要缓存。

  Manifest 文件

   manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。

   manifest 文件可分为三个部分:

CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

  一个参考例子

CACHE MANIFEST
# 2013-08-01 v1.0.0
CACHE:
/main.css
/main.js
/logo.gif

NETWORK:
*

FALLBACK:
//offline.html

/* ------------------------------ */
manifest 文件必须以CACHE MANIFEST 开头
第二行是一句注释,注明了manifest文件的日期、版本号。

CACHE部分罗列了所有离线使用所需的文件。
这些文件的路径都是相对offline.manifest而言的,使用绝对路径也是可以的。

NETWORK部分罗列了所有不需要被缓存的、离线时是不可用的文件。
可以使用星号来指示所有其他资源/文件都需要因特网连接

FALLBACK部分使用/字符定义了一个URL模板。
它的作用是访问每个页面时都会问“缓存中有这个页面吗?”
如果有则显示缓存页面,如果没有则显示指定的offline.html文件

应用的缓存会在其 manifest 文件更改时被更新。
如果更新了一幅图片,或者一个JavaScript函数,这些改变都不会被重新缓存。
更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。

/* ------------------------------ */

  离线行为

if(navigator.onLine){
	//在线
	console.log(‘在线‘)
}else{
	//离线
	console.log(‘离线‘)
}

window.addEventListener(‘online‘,function(e){
	console.log(‘在线‘);
},true);
window.addEventListener(‘offline‘,function(e){
	console.log(‘离线‘);
},true);
时间: 2024-08-11 04:40:15

了解HTML5和“她”的 API (三)的相关文章

HTML5之本地文件系统API - File System API

HTML5之本地文件系统API - File System API 2014-06-03 17:54 19991人阅读 评论(0) 收藏 举报 目录(?)[+] 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到的,还有比较新的特性 - File System API,它能够帮助我们来突破沙箱访问我们本地的文件系统,从而有效的弥补桌面和web应用之间的鸿沟.在今天这篇文章中,我们将会介绍基本的File system

HTML5关于上传API的一些使用(上)

HTML5提供了很多有用的API,其中就包括上传的API,XMLHttpRequest2.0,在HTML5时代之前,需要进行二进制的上传一般都会才用flash的方案,但是当XMLHttpRequest2.0出来之后,完全可以使用HTML5的上传解决方案,能够非常方便的进行二进制上传进度的显示,上传图片的本地预览,甚至可以做到断点续传,分片上传,多文件上传等各种复杂的底层功能. 首先回顾一下XMLHttpRequest1.0的传输过程 关于XMLHttpRequest 初始化XMLHttpRequ

用HTML5、地理定位API和Web服务来开发移动应用

HTML 5 是一项让人振奋的技术,这有着充分的理由.这将会是一次技术突破,因为它可以将桌面应用程序功能带入浏览器中.除了传统浏览器外,对于移动浏览器,其潜力甚至更大.不仅如此,最流行的移动浏览器甚至已经采用并实现了 HTML 5 规范中很多重要部分.在这个由五个部分组成的系列里,您将仔细了解 HTML 5 中的一些新技术,它们对移动 Web 应用程序开发具有重大影响.在本系列的每一部分中,您将动手开发一个展示 HTML 5 新特性的移动 Web 应用程序,这些特性可用于最新的移动 Web 浏览

HTML5语音合成Speech Synthesis API简介

要在前端实现语音合成,即将文字讲述出来,一开始考虑用百度tts语音合成的方法,后来发现html5 本身就支持语音合成.就直接用html5的咯,百度的那个还有调用次数限制,配置还麻烦 一.关于HTML5语音Web Speech API HTML5中和Web Speech相关的API实际上有两类,一类是“语音识别(Speech Recognition)”,另外一个就是“语音合成(Speech Synthesis)”,这两个名词听上去很高大上,实际上指的分别是“语音转文字”,和“文字变语音”. 而本文

HTML5 调用百度地图API地理定位

<!DOCTYPE html> <html> <title>HTML5 HTML5 调用百度地图API地理定位实例</title> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="ht

HTML5实现全屏API【进入和退出全屏】

现在主流浏览器基本上实现了全屏效果,但是不同浏览器实现不一样: [进入和退出全屏] // Webkit (works in Safari5.1 and Chrome 15)element.webkitRequestFullScreen();document.webkitCancelFullScreen(); // Firefox 10+element.mozRequestFullScreen();document.mozCancelFullScreen(); // W3C 提议element.r

Html5 本地文件读取 API 研究使用过程中的意外发现 - MDN

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 补充: 终于可以读出肉的眼能看懂的人类文字了!!! 经在 safari 7.0.4(9537.76.4) 测试,即使关闭 WebGL 支持,Fil

HTML5调用百度地图API进行地理定位实例

自从HTML5的标准确定以后,越来越多的网站使用HTML5来进行开发.虽然对HTML5支持的浏览器不是很多,但是依然抵挡不了大伙对HTML5开发的热情.今天为大家带来的是使用HTML5调用百度地图API进行地理定位实例.请看下面代码: <!DOCTYPE html> <html> <title>HTML5调用百度地图API进行地理定位实例</title> <head> <meta http-equiv="Content-Type&

Express4.x API (三):Response (译)

Express4.x API (一):application (译) -- 进行中 Express4.x API (二):request (译) -- 完成 Express4.x API (三):Response (译) -- 完成 Express4.x API (四):router (译) -- 进行中 写在前面 技术库更迭较快,很难使译文和官方的API保持同步,更何况更多的大神看英文和中文一样的流畅,不会花时间去翻译--,所以我们看到express中文网更多的还是英文,我们只有提升自己的英语