当前位置:首页 > 日记 > 正文

一个在localStorage在HTML5的使用教程

一个在localStorage在HTML5的使用教程
本文主要介绍了使用localStorage HTML5教程,和localStorage用于局部相互作用之间的浏览器和系统的相互作用。
本地存储的是什么

几天前,在旧项目中找到cookie操作是很奇怪的。经过协商,有必要缓存一些信息以避免在URL上传递参数,但没有考虑cookie会带来什么问题。

(1)cookie的大小限制在大约4K,不适合存储业务数据。
(2)每次都用HTTP发送cookie,浪费带宽。

我们是做移动的项目,这样真的很适合用在这里是本地存储技术,存储可以说优化的cookie,它可以用来存储数据在客户端的方便,它不会发送HTTP,但它也不是没有问题。

(1)对存储的大小限制为500万字左右,和各种浏览器不一致
在隐私模式存储不可读
(3)存储的基本读写文件,并且有一个比较卡的更多数据(Firefox将发送数据到内存时,认为这是可怕的)。
localStorage不能抓取爬虫,不要用它来完全代替URL

上述问题是可以避免的,所以我们应该把重点放在如何使用localStorage,和如何正确使用。
本地存储的使用
基本知识

localStorage存储对象分为两种:

的意思是:sessionstrage会话的会话含义。这里的会话指的是会话对象在用户浏览网站时,从进入网站到关闭网站的有效期。

存储:在客户端的硬件设备保存数据,不管它是什么,这意味着下一次的计算机打开,数据仍然存在。

两者的区别是暂时保存,长期保存。

这里有一个简单的代码来说明它的基本用法:

xml代码将内容复制到剪贴板。
身高:100px;>
sessionStorage
本地存储
保存数据

读取数据

var msg = document.getelementbyid('msg),
文本= document.getelementbyid(中的),
类型= document.getelementbyid();

函数保存(){
var str = text.value;
var t = type.value;
如果(T = = 'session){
sessionstorage.setitem('msg,STR);
{人}
localstorage.setitem('msg,STR);
}
}

函数加载(){
var t = type.value;
如果(T = = 'session){
msg.innerhtml = sessionstorage.getitem('msg);
{人}
msg.innerhtml = localstorage.getitem('msg);
}
}
真实的场景

在实际工作中,对存储的使用一般有以下要求:

(1)缓存一般信息,例如搜索页面的城市、城市、非实时位置信息。

2。缓存城市列表数据,这个数据通常更大。

三.每个缓存信息都需要可追溯性,例如,服务器通知城市数据更新。此时,我们必须在最新访问期间自动设置有效期。

每个信息都有过期的状态,服务器需要在过期的时间从服务器提取数据。

xml代码将内容复制到剪贴板。
定义(函数()){ }。

var存储= _。继承({
默认属性
特性:功能(){

/ /代理对象,默认为本地存储
this.sproxy = window.localstorage;

60 * 60 * 24 * 30 * 1000毫秒= 30天
this.defaultlifetime = 2592000000;

本地缓存来存储和映射的所有关键localStorage和到期日期
this.keycache = 'system_key_timeout_map;

当缓存容量满时,每次缓存删除的数量。
this.removenum = 5;

},

函数(){
如果(this.sproxy = null){
更throw'not重写属性;
}
},

初始化:功能(选择){
This.propertys();
This.assert();
},

*
新的本地存储
数据格式包括唯一键值、JSON字符串、到期日期和存款日期。
符号是格式化后的请求参数。当返回相同请求的不同参数时,它用于返回新数据。例如,该名单是北京的一个城市。切换到上海后,它将决定标记是否不同,并更新缓存的数据。标记相当于签名。
每个键的值只缓存一条信息。
* /
设置:函数(键,值,超时,符号){
无功_d =新的日期();
存款日期
VaR的有效期= _d.gettime();

最终保存的数据
var实体= null;

如果(!超时){
_d.settime(_d.gettime()+本。defaultlifetime);
超时= _d.gettime();
}
this.setkeycache(关键,超时);
实体= this.buildstorageobj(价值、有效期、超时、标志);

{试
this.sproxy.setitem(关键、JSON.stringify(实体));
返回true;
} catch(e){
当 / / localStorage是满的,这都是明确的。
如果(查询= = 'quotaexceedederror){
( / /本。更清晰。);
当 / /存储已满,选择最近的数据从到期日期删除。这也会有一些影响,但是感觉比所有的都好。如果缓存太多,这个过程是耗时的,小于100ms。
如果(!this.removelastcache())把这个数据存储太大;
this.set(键,值,超时,标志);
}
控制台console.log(E);
}
返回false;
},

删除已过期的缓存
removeoverduecache:函数(){
无功tmpobj =零,我,莱恩;

VAR现在=新的日期()GetTime();
退出/键
无功cachestr = this.sproxy.getitem(这个。keycache);
无功cachemap = { };
VaR NewMap = { };
如果(!cachestr){
返回;
}

cachemap = JSON.parse(cachestr);

为(i = 0,len = cachemap.length;我< len;i++){
tmpobj = cachemap {我};
如果(tmpobj.timeout <现在){
this.sproxy.removeitem(tmpobj。关键);
{人}
NewMap.push(tmpobj);
}
}
this.sproxy.setitem(this.keycache、JSON.stringify(部分));

},

removelastcache:函数(){
变量I,莱恩;
VaR Num = this.removenum | | 5;

退出/键
无功cachestr = this.sproxy.getitem(这个。keycache);
无功cachemap = { };
无功delmap = { };

这家商店太大了。
如果(!cachestr)返回false;

CacheMap.sort(功能(A,B){
返回a.timeout - b.timeout;
});

什么数据删除
delmap = cachemap.splice(0,努姆);
为(i = 0,len = delmap.length;我< len;i++){
This.sProxy.removeItem (delMap{i}.key);
}

this.sproxy.setitem(this.keycache,JSON.stringify(cachemap));
返回true;
},

setkeycache:功能(关键,超时){
如果超时(关键| | | |!!超时日期(GetTime)<<新(回));
无功我,莱恩,tmpobj;

获取当前已缓存的密钥字符串
无功oldstr = this.sproxy.getitem(这个。keycache);
无功oldmap = { };
当前键不存在
var标志= false;
var obj = { };
obj.key =关键;
obj.timeout =超时;

如果(oldstr){
oldmap = JSON.parse(oldstr);
如果(!_。ISArray(oldmap))oldmap = { };
}

为(i = 0,len = oldmap.length;我< len;i++){
tmpobj = oldmap {我};
如果(tmpobj.key = =键){
我oldmap { } = obj;
标志=真;
打破;
}
}
如果(!旗)oldmap.push(obj);
新的数组在缓存中
this.sproxy.setitem(this.keycache,JSON.stringify(oldmap));

},

buildstorageobj:功能(价值、有效期、超时、标志){
var obj = { {
价值:价值,
超时:超时,
签署:签字,
有效期:有效期
};
返回对象;
},

获取:函数(键,符号){
无功的结果,现在=新的日期()GetTime();
{试
结果:this.sproxy.getitem(关键);
如果(!结果)返回null;
结果= JSON.parse(结果);

数据过期
如果(result.timeout <现在)返回null;

验证签名
如果(符号){
如果(符号=结果,符号)
返回result.value;
返回null;
{人}
返回result.value;
}

} catch(e){
控制台console.log(E);
}
返回null;
},

获取签名
getsign:功能(关键){
var结果,符号= null;
{试
结果:this.sproxy.getitem(关键);
如果(结果){
结果= JSON.parse(结果);
结果result.sign符号=
}
} catch(e){
控制台console.log(E);
}
回签;
},

删除:函数(键){
返回this.sproxy.removeitem(关键);
},

清除:函数(){
This.sProxy.clear();
}
});

(storage.getinstance =功能){
如果(这个实例){
返回this.instance;
{人}
返回this.instance =新本();
}
};

返回存储;

});

此代码包含本地存储和处理的基本操作与上述问题,和真正的用途是被抽象。
xml代码将内容复制到剪贴板。
定义({ 'abstractstorage功能(abstractstorage){ },

代码_。继承({
默认属性
特性:功能(){

每个对象必须有一个存储键,不能重复。
this.key = null;

为s秒、m、d的默认数据生命周期
this.lifetime = '30m;

默认的返回数据
/ / this.defaultdata = null;

/ /代理对象,localStorage对象
this.sproxy =新abstractstorage();

},

SetOption:功能(可选){
_延长(这选项);
},

函数(){
如果(this.key = null){
throw'not覆盖关键属性;
}
如果(this.sproxy = null){
更throw'not重写属性;
}
},

初始化:功能(选择){
This.propertys();
this.setoption(选择);
This.assert();
},

_getlifetime:(功能){
var超时= 0;
var str = this.lifetime;
VaR(str.length str.charat单位= 1);
VaR Num = str.substring(0,str.length - 1);
var map { {
D:86400,
H:3600,
M:60,
S:1
};
如果(typeof单位= = 'String'){
unitunit = unit.touppercase();
}
超时数;
如果(单位)超时= map {单位};
返回值*超时* 1000;
},

数据缓存
设置:函数(值,符号){
获取/过期时间
var =新日期();
timeout.settime(timeout.gettime()+本。_getlifetime());
this.sproxy.set(this.key,价值,timeout.gettime(),标志);
},

单个属性集
setattr:功能(名称,价值,符号){
var obj的关键;
如果(_。采用(名字)){
对于(键中的名称){
如果(name.hasownproperty(关键))this.setattr(K,K的名字{ },值);
}
返回;
}

如果(!标志)标志= this.getsign();

获取当前对象
obj = this.get(标志)| | { };
如果(!Obj)返回;
obj {姓名} =价值;
this.set(obj,标志);

},

getsign:函数(){
返回this.sproxy.getsign(这个关键);
},

删除:函数(){
This.sProxy.remove(这个关键);
},

RemoveAttr:功能(attrname){
var = this.get(obj)| | { };
如果(obj { attrname }){
删除obj { attrname };
}
this.set(obj);
},

获取:函数(符号){
var result = { },空= true,一;
var obj = this.sproxy.get(this.key,标志);
变量类型=类型的对象;
var o = { 'String':真的,真的,'boolean若干':':true};
如果(O {型})返回的对象;

如果(_。ISArray(obj)){
对于(var i = 0,len = obj.length;我< len;i++){
结果{我} = obj {我};
}
} else if(_。采用(obj)){
结果=目标;
}

对于(结果中){
空= false;
打破;
}
返回!结果:空是空的;
},

GetAttr:功能(attrname,标签){
var obj = this.get(标签);
无功attrval = null;
如果(obj){
attrval = obj { attrname };
}
返回attrval;
}

});

(store.getinstance =功能){
如果(这个实例){
返回this.instance;
{人}
返回this.instance =新本();
}
};

返回商店;
});

当时我们实际使用的是使用存储类操作localStorage,和程序代码的简单测试:
存储完成后,它不会再去请求了,所以今天的代码基本上已经结束了。最后,Android混合系统中有一个后退按钮。一旦按下这个按钮,它会回到上一个页面,并将读取本地存储。一个简单的和不可靠的解决办法是加入webapp:

xml代码将内容复制到剪贴板。
window.onunload =函数(){ }; / /单页应用,不要问我为什么,我不知道

结论

本地存储是移动开发的关键技术点。我们需要有一个深刻的理解。具体的商业代码稍后会放在Git上,感兴趣的朋友可以理解。

相关文章

Photoshopfashiondesignairbagpost

Photoshopfashiondesignairbagpost

电脑软件,Photoshopfashiondesignairbagpostertutorial,本教程是用PS图象处理软件的天猫品牌海报设计时尚大气,主要分析了全屏海报的设计理念,感兴趣的朋友一起学习。 本教程是用PS图象处理软件的天猫品牌海报设计教程步骤时尚大气的不是很…

Word如何使用技能设置水平页词

Word如何使用技能设置水平页词

设置,如何使用,技能,电脑软件,Word,小时候打开word文档,如果有一个以上的页面会显示第二页的水平方向,看起来很不舒服,因为页面的默认方向是垂直的,所以我们设置水平页,这里教你如何设置word水平页,到实际上超级简单。 1。文件页设置。 2。将垂直…

在ps中创建抽象文本效果的方法

在ps中创建抽象文本效果的方法

抽象,方法,文本,效果,电脑软件,使用PS图象处理软件创造一个耀眼的光有趣的文本层次的效果。这是一个从初级到中级教程。现在试试看。 In this tutorial, I will introduce the dazzling light in the Photoshop to create an interesting h…

QQ空间个人卡为什么不显示最新的日

QQ空间个人卡为什么不显示最新的日

日志,空间,显示,常见问题,最新,情况可能是由以下原因引起的: 1。如果在QQ空间设置了访问权限,日志更新不会显示在QQ空间的个人卡上; 2。更新后的日志设置了访问权限,建议将更新后的日志权限打开给所有人。 3、登录空间设置、其他设置不检查Q…

如何利用ps制作数字碎片效果

如何利用ps制作数字碎片效果

数字,碎片,效果,电脑软件,ps,如下图所示,制作一个非常有创意的数码效果片,会非常震撼。 最终效果。 1。第一步:(准备工作)寻找好的素材图片。 2。设置画笔(当然,你可以在互联网上下载) 按下快捷键B选择画笔形状的阴影刷mdash;mdash;投影平方ndash;35…

如何使用word来使用人民币符号

如何使用word来使用人民币符号

如何使用,符号,人民币,电脑软件,word,相信我们已经看到人民币的迹象,我们可能会看到人民币的符号在很多形式上,比如人民币,人民币,这样的人民币符号,很多朋友对三者之间的区别都不是很了解,编辑以下简单介绍,欢迎大家阅读。 人民币mdash;只有人民币…

如何安装PS刷PS刷下载安装教程

如何安装PS刷PS刷下载安装教程

安装,下载安装,安装教程,电脑软件,教程下载,下载ps笔刷后,我不知道如何安装和使用它。实际上,这个方法很简单。以下萧边带给你一个安装教程下载PS笔刷。 下载ps笔刷后,我不知道如何安装和使用它。实际上,这个方法很简单。以下萧边为您带来ps笔…

PHP的正则表达式捕获和非捕获组(详

PHP的正则表达式捕获和非捕获组(详

解决方案,正则表达式,详细,电脑软件,PHP,正则表达式在项目开发过程中经常使用。可以说正则表达式是每个程序员最基本的要求。初学者很累的时候,他们刚刚接触正则表达式。最近,PHP正则表达式,一个朋友写的博客,受益很多,并在通道很感兴趣,在章的数…

在javascript中获取和设置光标位置的方法

在javascript中获取和设置光标位置的方法

位置,设置,光标,方法,电脑软件,本文介绍了一种在javascript中获取和设置光标位置的方法,供大家参考: 在输入中经常遇到的项目开发将光标移动到最后一个问题,今天我检查眉目传情,发现在伊江,Firefox,Opera等主流浏览器获取光标位置(getcursortposition)和…

ppwerpoint演示印刷作为一个教程的

ppwerpoint演示印刷作为一个教程的

教程,作为一个,演示,课程,基础,作为一名记者,在演示前把你的PowerPoint演示文稿打印给观众。观众可以参考相应的手稿时,你所展示的,或者你可以参考在本手稿。如果你打印演示在讲义的形式,你可以把空白行在每一页的每一页为观众注意。下面,我们以…

在word文档中添加音乐文件的方法词

在word文档中添加音乐文件的方法词

文档,常见问题,方法,音乐文件,词中,问题:将音乐文件添加到word文档中的方法你可以在另一台机器上打开它,听! 答:打开MP3需要添加背景音乐的文档,单击视图菜单,页眉和页脚;进入页脚编辑区,单击插入菜单;;Windows媒体,player单击插入WMP;对象。 右键单击…

RPC、RMI和SOAP的详细解释

RPC、RMI和SOAP的详细解释

解释,详细,电脑软件,RPC,RMI,============================================================================ RPC与RMI的区别 ============================================================================ RPC:(远程过程调用) 它被…