详解javascript 存储
javascript用于存储的方式可谓是多种多样,善于应用‘存储’可以大大的提高网站的性能,博主结合日常开发常见需求做一下总结,希望对大家有用~
1.cookie
清理机制: IE
和Opera
会清理近期最少使用的cookie
,Firefox
会随机清理cookie
。cookie常见携带参数
属性项 | 属性项介绍 |
---|---|
name= value |
键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样 |
Expires/ max-age |
过期时间,在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT |
Domain | 生成该 Cookie 的域名,如 domain=”soulteary.com” |
Path | 该 Cookie 是在当前的哪个路径下生成的,如 path=/admin/ |
Secure | 如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie |
http | http-only true:cookie只能在服务器端读取和修改,比较安全 |
如果 Cookie 具有 HttpOnly 属性且不能通过客户端脚本访问,则为 true;否则为 false。默认为 false。
ie 6 +都支持属性 HttpOnly,该属性有助于缓解跨站点脚本威胁。
常见应用:
- 使用原生js操作cookie
document.cookie = name + '=' + escape(value); //设置cookie
//设置过期时间
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
//读取cookie
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); //正则匹配
if(arr=document.cookie.match(reg)){ //使用match匹配,arr[0] 为匹配成功的字符串,比如" test1=2222",之后为()中逐个匹配到的值
return unescape(arr[2]);
}
else{
return null;
}
}
//删除cookie
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null){
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
}
2.localstorage
常见应用:
- 判断localstorage已经存储满了
try {
localStorage.setItem(key, JSON.stringify({data: value, time: curTime}));
} catch (e) {
//如果存储满了,就全部删掉
localStorage.clear();//全部删除
localStorage.setItem(key, JSON.stringify({data: value, time: curTime}));
}
存储满后会抛出异常,只要捕获异常,再删除全部数据,即可。
- 判断localstorage已过期 (由于localstorage没有cookie的过期控制,需要自己控制)
//封装过期控制代码
function set(key, value) {
var curTime = new Date().getTime();
try {
localStorage.setItem(key, JSON.stringify({data: value, time: curTime}));
} catch (e) {
//如果存储满了,就全部删掉
localStorage.clear();//全部删除
localStorage.setItem(key, JSON.stringify({data: value, time: curTime}));
}
}
function get(key, exp) {
var data = localStorage.getItem(key);
var dataObj = JSON.parse(data);
if (new Date().getTime() - dataObj.time > exp) {
localStorage.removeItem(key);//过期就清除key的值
console.log('信息已过期');
} else {
return JSON.stringify(dataObj.data);
}
}
- 判断浏览器是否支持localstorage
if (window.localStorage) {
console.log('This browser supports localStorage');
} else {
console.log('This browser does NOT support localStorage');
}
- 常见api
localStorage.setItem("b", str); //设置b的值
var b = localStorage.getItem("b"); //获取b
localStorage.clear();//全部删除
localStorage.removeItem(key);//清除key的值
3.sessionstorage
4.离线缓存(application cache)
使用方法:
①CACHE MANIFEST – 在此标题下列出的文件将在首次下载后进行缓存
②NETWORK – 在此标题下列出的文件需要与服务器的连接,且不会被缓存
③FALLBACK – 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
更新:只有server端的manifest文件改变,浏览器才会重新拉取离线数据,需要页面再次刷新(2次刷新才能获取新资源),更新是全局性的,无法单独更新某个文件。
CACHE MANIFEST
# versin 1.0.0 //版本,若修改,则重新拉取
CACHE:
/theme.css //缓存该文件
/main.js
NETWORK: //不会被缓存的文件
login.jsp
FALLBACK: //回退页面
/html/ /offline.html
详解javascript 存储的更多相关文章
- 详解javascript的类
前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...
- 详解Javascript的继承实现(二)
上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构 ...
- 【转】详解JavaScript中的this
ref:http://blog.jobbole.com/39305/ 来源:foocoder 详解JavaScript中的this JavaScript中的this总是让人迷惑,应该是js众所周知的坑 ...
- js对象详解(JavaScript对象深度剖析,深度理解js对象)
js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...
- 详解 javascript中offsetleft属性的用法(转)
详解 javascript中offsetleft属性的用法 转载 2015-11-11 投稿:mrr 我要评论 本章节通过代码实例介绍一下offsetleft属性的用法,需要的朋友可以做一 ...
- 详解javascript中的this对象
详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...
- 详解JavaScript调用栈、尾递归和手动优化
调用栈(Call Stack) 调用栈(Call Stack)是一个基本的计算机概念,这里引入一个概念:栈帧. 栈帧是指为一个函数调用单独分配的那部分栈空间. 当运行的程序从当前函数调用另外一个函数时 ...
- 详解JavaScript的任务、微任务、队列以及代码执行顺序
摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("scrip ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
随机推荐
- JAVA 8 方法引用 - Method References
什么是方法引用 简单地说,就是一个Lambda表达式.在Java 8中,我们会使用Lambda表达式创建匿名方法,但是有时候,我们的Lambda表达式可能仅仅调用一个已存在的方法,而不做任何其它事,对 ...
- Apache Project SVN Download Sit
apache project svn download sit : http://svn.apache.org/repos/asf 如果想要研究相关项目的源码的话.或者想要成为某个项目的开发者, 就可 ...
- Sql Server之旅——第八站 复合索引和include索引到底有多大区别?
周末终于搬进出租房了,装了宽带....才发现没网的日子...那是一个怎样的与世隔绝呀...再也受不了那样的日子了....好了,既然网 安上去了,还得继续我的这个系列. 索引和锁,这两个主题对我们开发工 ...
- 安装了SQL2005再安装SQL 2008R2,提示此计算机上安装了 Microsoft Visual Studio 2008 的早期版本和检查是否安装了 SQL Server 2005 Express 工具的解决方案
工作电脑上安装了SQL 2005, 但是客户电脑上安装的是SQL 2008R2,有时候连接他们的库调试没法连接,很不方便.然后又安装了个SQL2008 R2,期间遇到这两个问题,网上搜索了一下收到了解 ...
- cocos之观察者模式应用实例
观察位置: 定义宏常量位置: 添加观察者回调函数位置: 回调函数实现位置:
- Linux IPC POSIX 共享内存
模型 #include <unistd.h> //for fstat() #include <sys/types.h> //for fstat() #include <s ...
- linux 源码安装mysql 5.5
今天在ubuntu和CentOS下,用源码反复安装了许多次mysql,趁还没忘记,赶紧记下来... 在ubuntu和CentOS下安装过程倒是没什么差别. 0.下载源码, ...
- gcc编译参数-fPIC的一些问题
gcc编译参数-fPIC的一些问题 (2012-07-26 15:41:08) 转载▼ 标签: linux compiler gcc -fpic it 分类: NSN_BspDriver ppc_85 ...
- corefile 设置
程序运行的过程中,可能会因为一些隐藏的bug导致崩溃,为了在出问题时,及时记录所在环境的情况,所以要设置core文件的产生.其实其本质就是把进程的内存保存到文件中去. 1.core文件的生成开关和大小 ...
- mysql级联更新
MySQL 各种级联查询后更新(update select). CREATE TABLE `tb1` ( `id` int(11) NOT NULL, `A` varchar(100) defa ...