`

HTML5存储学习笔记

阅读更多

一.客户端存储历程

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是永不过期的,如果想要实现更新策略,需要业务开发实现更新机制)

 

学习视频地址:http://www.imooc.com/video/3127

  • 大小: 82.3 KB
  • 大小: 43.5 KB
  • 大小: 172.2 KB
  • 大小: 18.2 KB
  • 大小: 99.6 KB
  • 大小: 28.4 KB
  • 大小: 39.3 KB
  • 大小: 23.4 KB
  • 大小: 68.4 KB
  • 大小: 63.8 KB
  • 大小: 49.1 KB
  • 大小: 74.4 KB
  • 大小: 49.2 KB
  • 大小: 66.9 KB
  • 大小: 44.2 KB
  • 大小: 72 KB
  • 大小: 64.6 KB
  • 大小: 142.9 KB
分享到:
评论

相关推荐

    bootstrap学习笔记-html5

    这个“bootstrap学习笔记-html5”压缩包文件显然包含了有关如何使用Bootstrap和HTML5进行网页设计的资料,非常适合初学者入门。接下来,我们将深入探讨这两个重要主题。 HTML5(超文本标记语言第五版)是网页开发的...

    HTML5学习笔记

    4. **Web存储**:HTML5提供了两种本地存储机制,`localStorage`和`sessionStorage`,它们允许网站在用户的浏览器上持久化存储数据,从而实现离线应用或增强用户体验。`localStorage`的数据在关闭浏览器后仍然保留,...

    个人做的HTML5学习笔记

    ### HTML5学习笔记知识点梳理 #### 一、HTML5简介及特点 - **定义**: HTML5是HTML(HyperText Markup Language)的最新版本,由万维网联盟(W3C)于2014年10月正式发布。它不仅继承了HTML的基本特性,还新增了许多...

    HTML5学习笔记(总结提炼版)——001

    本学习笔记将聚焦于HTML5的基础知识,包括其新特性、元素和最佳实践。 一、HTML5的新特性 1. 语义化标签:HTML5引入了新的语义化标签,如、、、和等,这些标签有助于更好地组织内容,提高可读性和可访问性。 2. ...

    新手html学习笔记(仅供菜鸟成长参考).rar

    本资源“新手html学习笔记(仅供菜鸟成长参考).rar”为初学者提供了一条理解并掌握HTML的途径。下面将详细阐述HTML的相关知识点。 一、HTML概述 HTML是一种用于创建网页的标准标记语言,它由一系列元素组成,这些...

    html5学习笔记.txt

    相比于之前的HTML版本,HTML5引入了一系列新特性,包括多媒体支持、离线存储、实时通信等,为开发者提供了更强大的工具集。 ### 多媒体元素 HTML5中新增的`&lt;video&gt;`和`&lt;audio&gt;`元素,使得在网页中嵌入视频和音频...

    html css js全套学习笔记+举例

    HTML5引入了许多新特性,如语义化标签(如`&lt;header&gt;`、`&lt;nav&gt;`、`&lt;article&gt;`)、离线存储(Application Cache)、拖放功能、媒体元素(`&lt;video&gt;`、`&lt;audio&gt;`)等,使得创建富媒体和移动设备友好型网站变得更加容易。...

    超详细的web前端基础学习笔记

    本学习笔记涵盖了 web 前端开发的基础知识,包括 HTML 的基本结构、文档类型声明、常见的文本和列表标签、分区标签以及图片标签的使用方法。对于初学者而言,这些内容是构建网页的基础,而掌握这些基础知识是进一步...

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

    html+css和html5+css3的学习笔记。

    此外,HTML5还支持离线存储、拖放功能、媒体元素(如音频和视频)的内联播放,以及新的表单控件,如`&lt;date&gt;`、`&lt;range&gt;`等。 CSS则负责网页的样式和布局,使得内容以美观的方式呈现。CSS3带来了许多增强视觉效果的...

    HTML5学习笔记.pdf

    HTML5 学习笔记 HTML5 是 W3C 与 WHATWG 合作的结果,WHATWG 指 Web Hypertext Application Technology Working Group。WHATWG 致力于 web 表单和应用程序,而 W3C 专注于 XHTML 2.0。 HTML5 中的新特性包括: * ...

    j2ee学习笔记-j2ee学习笔记

    **J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端组件模型、服务和API,支持...

    Html5app开发学习笔记.pdf

    本篇学习笔记主要探讨了HTML5作为移动开发平台的潜力,以及开发者在构建HTML5 App时需要关注的关键技术和挑战。 首先,HTML5被视作一个强大的跨平台移动应用开发工具,它提供了一种在不同设备上构建应用程序的统一...

    HTML5-学习笔记.pdf

    总的来说,HTML5的学习需要理解其与HTML4的差异,掌握新的元素、属性和语法特性,以及如何利用这些新特性来提升网页的质量和用户体验。HTML5和CSS3的结合,无疑为Web开发开辟了新的道路,它们正在逐步改变着Web应用...

    html5在移动领域开发学习笔记(ppt版)

    HTML5是下一代网页标准,它的...通过学习这个HTML5在移动领域开发的学习笔记,你可以深入了解这些技术,结合实际案例进行练习,从而成为一名熟练的HTML5移动应用开发者。记住,不断实践和探索是掌握新技术的最佳途径。

    HTML5-学习笔记.docx

    HTML5的离线存储(如localStorage)和地理定位API等功能,使得web应用即使在离线状态下也能提供部分功能,极大地提升了用户体验。 HTML5还强调了浏览器之间的兼容性,通过制定统一的标准,减少了因不同浏览器差异...

    OA项目学习笔记下载

    本压缩包包含了一份OA项目的学习笔记,是深入理解并掌握OA项目开发与实施的重要资料。 在OA项目学习笔记中,我们可以探讨以下几个关键知识点: 1. **OA系统概述**:OA系统通常包括工作流管理、文档管理、协同办公...

    HTML5学习笔记.docx

    本笔记主要聚焦于HTML5的一些基本元素和特性,以及CSS中的常见样式规则和技巧,旨在帮助中低级开发者提升技能。 首先,HTML5是超文本标记语言的最新版本,它引入了许多新的语义化标签,如、、等,这些标签使得网页...

Global site tag (gtag.js) - Google Analytics