一.客户端存储历程
1.远古时期
a.cookies的用法和缺陷
主要用作购物车或身份的验证
缺陷:
1).http请求头上会带着
2).大小4k
3).主Domain污染
cookies在浏览器存储形态
Name:key值
Value:key值对应的Value
Domain:存在所属的Domain
Path:根路径
Expires:过期时间
Size:cookie字符的长度,各浏览器计算方法(加name不加name)不同可能不一样
HTTP:勾上的表明此cookie只能被服务端读取或者修改,身份信息存这个比较好
Secure:勾上说明请求只能是加密的
以baidu为例进一步说明:
1).在主页的console台输出所有的cookie,发现无key值为BDUSS的cookie。
2).music.baidu.com的请求头上带有主域名的cookie[所以,不能随意在主域名中加cookie]
b.userdata(不符合W3C标准)
1).只有IE支持(5.0-9.0),存储大小64K
2).XML文件
c.google Gears:Chrome支持的客户端存储,引擎是64SQLite,12.0以后版本已放弃支持,且必须通过用户授权。
二.HTML5存储的目标
1.解决4k的大小问题
2.解决请求头常带存储信息的问题
3.解决关系型存储的问题
4.跨浏览器
三.HTML5的三种存储
1.本地存储(localstorage&&sessionstorage)
1)存储形式:key-value
2)过期:永久存储,永不失效,除非手动删除。对于sessionstorage,重新打开页面或者关闭浏览器,sessionstorage失效。
3)大小:官方给出文档是每个域名5M
4)浏览器支持情况:IE8以上、Firefox、Chrome都支持
5)使用方法:localstorage API介绍(getItem、setItem、removeItem、key、clear)
实例:
6)可以存数组、json数据、图片、脚本、样式文件
实例:
datauri.html
<html> <head> <meta charset="utf-8"> <!-- 网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放。 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> width - viewport的宽度 height - viewport的高度 initial-scale - 初始的缩放比例 minimum-scale - 允许用户缩放到的最小比例 maximum-scale - 允许用户缩放到的最大比例 user-scalable - 用户是否可以手动缩放 --> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="MobileOptimized" content="320"> <title>pic storage demo</title> </head> <body> <script type="text/javascript"> var src="01.jpg"; function set(key) { var img = document.createElement('img'); <!-- 当图片加载完成的时候触发回调函数 --> img.addEventListener("load", function() { var imgCanvas = document.createElement("canvas"), imgContext = imgCanvas.getContext("2d"); <!-- 确保canvas元素的大小和图片尺寸一致 --> imgCanvas.width = this.width; imgCanvas.height = this.height; <!-- 渲染图片到canvas中 --> imgContext.drawImage(this, 0, 0, this.width, this.height); <!-- 用data url的形式取出 --> var imgAsDataURL = imgCanvas.toDataURL("image/png"); <!-- 保存到本地存储中 --> try { localStorage.setItem(key, imgAsDataURL); }catch(e) { console.log("Storage failed:" + e); } }, false); img.src = src; } function get(key) {<!-- 从本地缓存获取图片并且渲染 --> var srcStr = localStorage.getItem(key); var imgObj = document.createElement('img'); imgObj.src = srcStr; document.body.appendChild(imgObj); } </script> </body> </html>
运行效果:
7)使用注意事项:
i.使用前要判断浏览器是否支持
ii.写数据时,需要异常处理,避免超出容量抛错
iii.避免把敏感的信息存入localstorage
iv.key的唯一性
8)使用限制:
i.存储更新策略,过期控制
自已开发实现带有过期控制的实例:
timeout.html
<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="MobileOptimized" content="320"> <title>timeout demo</title> </head> <body> <script type="text/javascript"> function set(key,v) { var curTime = new Date().getTime(); localStorage.setItem(key, JSON.stringify({data:v, time:curTime})); } function get(key, exp) { var data = localStorage.getItem(key); var dataObj = JSON.parse(data); if(new Date().getTime() - dataObj.time > exp) { console.log('expires'); }else { console.log('data=' + dataObj.data); } } </script> </body> </html>
运行效果:
ii.子域名之间不能共享存储数据(可以借助HTML5的postMessage方式做跨域的处理,达到子域名之间数据共享的目的)
iii.超出存储大小之后如何存储(业务处理,try...catch...,用LRU,FIFO方法淘汰掉旧的数据)
iv.server端如何取到(只能跟在相应的参数后面)
9)使用场景
i.利用本地数据,减少网络传输
ii.弱网络环境下,高廷迟,低带宽,尽量把数据本地化
2.indexedDB和Web SQL
indexedDB database:一种能在浏览器中持久地存储结构化数据的数据库,并且为web应用提供了丰富的查询能力。
浏览器支持:chrome 11+,opera 不支持,firefox 4+,IE 10+
存储结构:
实例:增、删、改;事务;游标;索引。
3.离线缓存(application cache)
1).离线缓存(offline application):它可以让Web应用在离线的情况下继续使用,通过manifest文件指明需要缓存的资源。
2).检测是否在线:navigator.onLine
3).原理:
4).浏览器支持情况:Safari on iOS 3.2+、Android Browser 1.5+、IE 9+、Chrome 4+等,支持面比较广。
5).使用:
a.创建manifest文件
CACHE MANIFEST #version n.n CACHE: #需要缓存的文件 /css/sample.css /images/image.jpg NETWORK: #每次重新拉取的文件 * FALLBACK: #离线状况下代替文件 /offline.html
b.在HTML页面中引用manifest文件
<html manifest="sample.appcache">
c.在服务器添加mime-type text/cache-manifest
如在apache的conf目录下的mime-types文件的最后加上如下一行内容:
text/cache-manifest appcache
6)实例
appcache.html
<html lang="en" manifest='manifest.appcache'> <head> <meta charset="utf-8"></meta> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="MobileOptimized" content="320"> <link rel="stylesheet" type="text/css" href="./css/assets.css"></link> <title>app cache demo</title> </head> <body> <h1>APP Cache Demo</h1> <ul> <li><img src="./img/1.jpg"></img></li> <li><img src="./img/2.jpg"></img></li> </ul> <script type="text/javascript"> window.addEventListener('load', function(e) { window.applicationCache.addEventListener('updateready', function(e) { window.log(window.applicationCache.status); if(window.applicationCache.status == window.applicationCache.UPDATEREADY) { window.applicationCache.swapCache(); if(confirm('A new version of this site is available.Load it?')) { window.location.reload(); } }else { console.log('manifest didn\'t change'); } }, false); },false); </script> </body> </html>
manifest.appcache
CACHE MANIFEST #version 1.1 CACHE: img/1.jpg img/2.jpg css/assets.css NETWORK: *
运行效果:
第一次打开页面:
此时可以看离线缓存信息如下:
再次刷新页面,显示Application Cache无更新:
我们将manifest.appcache中的版本号改成1.2,并修改appcache.html中h1标签的内容为“APP Cache Demo 1”,再刷新页面:
点“确认”:
如果觉得页面不适合用离线缓存,重命名manifest.appcache文件名即可。
7).如何更新?
如果有修改资源文件,必须通过修改manifest文件来刷新被缓存的文件列表。
8).优势:
a.完全离线
b.资源被缓存,加载更快
c.降低server负载
9).使用缺陷:
a.含有manifest属性的当前请求页无论如何都会被缓存
b.更新需要建立在manifest文件的更新,文件更新后是需要页面再次刷新的(需要2次刷新才能获取新资源)
c.更新是全局性的,无法单独更新某个文件(无法单点更新)
d.对于链接的参数变化是敏感的,任何一个参数的修改都会被(master)更新缓存(重复缓存含参页面)index.html和index.html?renew=1会被认为是不同文件,分别缓存
实例:
浏览器输入http://localhost:8088/html5/appcache.html?a=1,离线缓存被创建
浏览器输入http://localhost:8088/html5/appcache.html?a=2,可以看到增加了一个master entry到离线缓存
此时,我们修改manifest.appcache中的version,刷新页面我们发现页面会将a=1和a=2全部下载一遍
查看Resources我们发现a=1和a=2在浏览器里生成两份application cache,当检测到不同时,会将相关的文件都拉取一遍
10).试用场景:
a.单地址的页面
b.对实时性要求不高的业务
c.离线webapp
Application cache的应用-金融时报:http://app.ft.com/,我们先设置一下chrome浏览器的代理为“Apple iPhone 5"(点击那个 ">三" 的图标,Then select “Emulatio" 即可看到)
四.HTML5存储能解决什么问题?
1.实现把图片存在客户端
2.实现跨域共享客户端缓存
3.做到真正的离线访问web应用
4.实现一个客户端的数据库
五.总结
1.html5存储优势:
a.存储空间大
b.接口丰富
c.数据相对安全
d.省流量
e.关系型(indexedDB)
2.html5存储劣势
a.浏览器兼容
b.同源(localstorage不可以跨子域,manifest文件必须和引用它的文件在同一个域名下面)
c.脚本控制(只能在浏览器端存放,如果服务器端也想拿到这些数据只能通过请求)
d.更新策略(localstorage是永不过期的,如果想要实现更新策略,需要业务开发实现更新机制)
相关推荐
这个“bootstrap学习笔记-html5”压缩包文件显然包含了有关如何使用Bootstrap和HTML5进行网页设计的资料,非常适合初学者入门。接下来,我们将深入探讨这两个重要主题。 HTML5(超文本标记语言第五版)是网页开发的...
4. **Web存储**:HTML5提供了两种本地存储机制,`localStorage`和`sessionStorage`,它们允许网站在用户的浏览器上持久化存储数据,从而实现离线应用或增强用户体验。`localStorage`的数据在关闭浏览器后仍然保留,...
### HTML5学习笔记知识点梳理 #### 一、HTML5简介及特点 - **定义**: HTML5是HTML(HyperText Markup Language)的最新版本,由万维网联盟(W3C)于2014年10月正式发布。它不仅继承了HTML的基本特性,还新增了许多...
本学习笔记将聚焦于HTML5的基础知识,包括其新特性、元素和最佳实践。 一、HTML5的新特性 1. 语义化标签:HTML5引入了新的语义化标签,如、、、和等,这些标签有助于更好地组织内容,提高可读性和可访问性。 2. ...
本资源“新手html学习笔记(仅供菜鸟成长参考).rar”为初学者提供了一条理解并掌握HTML的途径。下面将详细阐述HTML的相关知识点。 一、HTML概述 HTML是一种用于创建网页的标准标记语言,它由一系列元素组成,这些...
相比于之前的HTML版本,HTML5引入了一系列新特性,包括多媒体支持、离线存储、实时通信等,为开发者提供了更强大的工具集。 ### 多媒体元素 HTML5中新增的`<video>`和`<audio>`元素,使得在网页中嵌入视频和音频...
HTML5引入了许多新特性,如语义化标签(如`<header>`、`<nav>`、`<article>`)、离线存储(Application Cache)、拖放功能、媒体元素(`<video>`、`<audio>`)等,使得创建富媒体和移动设备友好型网站变得更加容易。...
本学习笔记涵盖了 web 前端开发的基础知识,包括 HTML 的基本结构、文档类型声明、常见的文本和列表标签、分区标签以及图片标签的使用方法。对于初学者而言,这些内容是构建网页的基础,而掌握这些基础知识是进一步...
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
此外,HTML5还支持离线存储、拖放功能、媒体元素(如音频和视频)的内联播放,以及新的表单控件,如`<date>`、`<range>`等。 CSS则负责网页的样式和布局,使得内容以美观的方式呈现。CSS3带来了许多增强视觉效果的...
HTML5 学习笔记 HTML5 是 W3C 与 WHATWG 合作的结果,WHATWG 指 Web Hypertext Application Technology Working Group。WHATWG 致力于 web 表单和应用程序,而 W3C 专注于 XHTML 2.0。 HTML5 中的新特性包括: * ...
**J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端组件模型、服务和API,支持...
本篇学习笔记主要探讨了HTML5作为移动开发平台的潜力,以及开发者在构建HTML5 App时需要关注的关键技术和挑战。 首先,HTML5被视作一个强大的跨平台移动应用开发工具,它提供了一种在不同设备上构建应用程序的统一...
总的来说,HTML5的学习需要理解其与HTML4的差异,掌握新的元素、属性和语法特性,以及如何利用这些新特性来提升网页的质量和用户体验。HTML5和CSS3的结合,无疑为Web开发开辟了新的道路,它们正在逐步改变着Web应用...
HTML5是下一代网页标准,它的...通过学习这个HTML5在移动领域开发的学习笔记,你可以深入了解这些技术,结合实际案例进行练习,从而成为一名熟练的HTML5移动应用开发者。记住,不断实践和探索是掌握新技术的最佳途径。
HTML5的离线存储(如localStorage)和地理定位API等功能,使得web应用即使在离线状态下也能提供部分功能,极大地提升了用户体验。 HTML5还强调了浏览器之间的兼容性,通过制定统一的标准,减少了因不同浏览器差异...
本压缩包包含了一份OA项目的学习笔记,是深入理解并掌握OA项目开发与实施的重要资料。 在OA项目学习笔记中,我们可以探讨以下几个关键知识点: 1. **OA系统概述**:OA系统通常包括工作流管理、文档管理、协同办公...
本笔记主要聚焦于HTML5的一些基本元素和特性,以及CSS中的常见样式规则和技巧,旨在帮助中低级开发者提升技能。 首先,HTML5是超文本标记语言的最新版本,它引入了许多新的语义化标签,如、、等,这些标签使得网页...