了解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);
了解HTML5和“她”的 API (三)的更多相关文章
- HTML5之本地文件系统API - File System API
HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...
- HTML5语音合成Speech Synthesis API简介
by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5865本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意 ...
- html5获取地理位置信息API
html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...
- HTML5关于上传API的一些使用(上)
HTML5提供了很多有用的API,其中就包括上传的API,XMLHttpRequest2.0,在HTML5时代之前,需要进行二进制的上传一般都会才用flash的方案,但是当XMLHttpRequest ...
- 用JSON-server模拟REST API(三) 进阶使用
用JSON-server模拟REST API(三) 进阶使用 前面演示了如何安装并运行 json server , 和使用第三方库真实化模拟数据 , 下面将展开更多的配置项和数据操作. 目录: 配置项 ...
- HTML5 postMessage 和 onmessage API 具体应用
HTML5 postMessage 和 onmessage API 具体应用 随着 HTML5 的发展.了解并熟悉 HTML5 的 API 接口是很重要的.postMessage(send) 和 on ...
- Express4.x API (三):Response (译)
Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 完成 Express4.x API (二):request (译) -- 完成 ...
- 使用HTML5的两个api,前端js完成图片压缩
主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...
- HTML5 调用百度地图API地理定位
<!DOCTYPE html> <html> <title>HTML5 HTML5 调用百度地图API地理定位实例</title> <head&g ...
随机推荐
- swift 简单语句 控制流语句
在 Swift 中.有两种类型的语句:简单语句和控制流语句.简单语句是最常见的.用于构造表达式和声明.控制流语句则用于控制程序运行的流程,Swift 中有三种类型的控制流语句:循环语句.分支语句和控制 ...
- storm-编程入门
一 编程接口 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbm ...
- 关于CodeReview(java)(转)
关于codereview,在平时的开发中,经常忽略的环节,参照目前介绍写好代码的几本书和之前掉进的坑,做了一个总结,分享出来. 为什么要做 通过review规避一些代码层面的问题 提升可读性,方便后续 ...
- SE 2014 年4月21日(二)
实验练习: 如图配置: 两BGP自治系统,要求建立相关BGP邻居关系 1. 建立BGP邻居关系 要求使用BGP对等体组完成(IBGP要求使用loopback接口作为TCP建立的源接口) 2. R3 R ...
- Knockout应用开发指南 第六章:加载或保存JSON数据
原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...
- poj3126解题报告
题意:简单的说就是:有一个人门牌号是一个四位数的整数,并且还是一个素数,现在他想要换成另外一个四位数且是素数的门牌号,而且,每次都只能更换这个四位数的一个位置的数 ,也就是每换一次都只改变一个数字,而 ...
- (017)将一棵二叉查找树重构成链表(keep it up)
给定一棵二叉查找树,设计算法,将每一层的全部结点构建为一个 链表(也就是说, 假设树有D层,那么你将构建出D个链表). 这个题实质是个BFS,可是实现起来有点麻烦,又不像常见的BFS, 所以编写代码时 ...
- Macosx Setdns
通过C语言接口在Mac App内部对系统的DNS配置进行改动. Mac OS X设置DNS代码 演示样例代码setDNS.c内容例如以下: #include <SystemConfigurati ...
- SVM-SVM概述
(一)SVM背景资料简介 支持向量机(Support Vector Machine)这是Cortes和Vapnik至1995首次提出,样本.非线性及高维模式识别中表现出很多特有的优势,并可以推广应用到 ...
- Windows Phone开发(2):竖立自信,初试锋茫
原文:Windows Phone开发(2):竖立自信,初试锋茫 上一篇文章中,我们聊了一些"大炮"话题,从这篇文章开始,我们一起来学习WP开发吧. 一.我们有哪些装备. 安装完VS ...