关于本地存储的那些事

好久没有更博了呢,,博主是个懒妹子~~~今天,我们就来说一下关于web前段关于本地存储的那些事。

对于本地存储从来就不是一个新鲜的概念,随着web应用程序的出现,也产生了对于能够字节在客户端上存储用户信息能力的要求。主要常用的方式也就是那么几种,用一张很经典的图来开始我们这个话题。

这里写图片描述

1.cookies

在h5之前,一般采用cookies的方式。

什么是cookie?

cookie是存储于访问者计算机中的变量
cookie是浏览器提供的一种机制,可以由JavaScript对其进行操作(设置、读取、删除)

cookie的优点
cookie可以跨越同域名下的多个网页使用
cookie可以实现跨页面全局变量
同一个网站中所有页面共享一套cookie
可以设置有效期限

cookie机制将信息存储于用户硬盘,因此可以作为跨页面全局变量,这是它最大的一个优点
常用场合:(1)保存用户登录状态;(2)跟踪用户行为;(3)定制页面;(4)创建购物车 …等等

cookie的缺点

(1)cookie可能被禁用;
(2)cookie与浏览器相关,不能互相访问;
(3)cookie可能被用户删除;
(4)cookie安全性不够高;
(5)cookie存储空间很小(只有4KB左右)
(6)cookie操作麻烦,没有方便的API
(7)cookie每次操作会随着HTTP请求发送给服务器

简单封装设置cookie,获取cookie以及删除cookie的函数:

function setCookie(key,Val,Days){//设置cookie
        var dates=new Date();
        dates.setDate(dates.getDate()+Days);
        document.cookie=key+'='+escape(Val)+'; expires='+dates;
        //escape函数用来对cookie的值进行转码,以免获取的时候会出现乱码
    }
    function getCookie(key){//获取cookie
        var cookies=document.cookie;
        var arr1=cookies.split('; ');
        for (var i = 0; i < arr1.length; i++) {
            var arr2=arr1[i].split('=');
            if (arr2[0]==key) {
                return unescape(arr2[1]);//解码
            };
        };
        return false;
    }
    function rmCookie(key){//删除cookie
        setCookie(key,'a',-3);//将cookie设置为过期后,系统会自动删除
    }

2.flash

众所周知,h5以前,flash在视频,音频领域占据着非常牛掰的地位,但是h5普及以来,flash已经放弃了移动端,所以用flash的方式在移动端是不可以用的,并且flash的使用必须要有插件,比较麻烦。

3.HTML5 LocalStorage

Web Storage 的目的是克服由cookie带来的一些限制,当数据需要被阉割控制在客户端上时,无需持续的将数据发回服务器。

Web Storage 的两个主要目标:

1.提供一种在cookie之外存储会话数据的途径。
2.提供一种存储大量可以跨回话存在的数据的机制。

1.Storage 类型

主要方法:

  1. clear():删除所有值,FireFox 不支持
  2. getItem(name):根据指定名字获取对应的值
  3. key(index):获取index位置处的值的名字
  4. romoveItem(name):删除name指定的键值对
  5. setItem(name,value):设置键值对

2.sessionStorage

sessionStorage对象存储在特定某个会话的临时数据,存储的数据在浏览器关闭后将不再存在。
sessionStorage中的数据只能在最初给对象存储数据的页面访问到,其他页面不可访问。
sessionStorage 是Storage的实例,可以使用Storage的方法。

3.globalStorage

globalStorage可以跨越会话存储数据,但是有特定的访问限制,即首先要指定那些域可以访问。

这里指定的存储空间只能由来自wrox.com的页面访问,其他域名不可访问。

globalStorage对象不是Storage的实例,而具体的globalStorage[“wrox.com”]才是。

globalStorage["wrox.com"].name = 'mike';//保存数据
var name = globalStorage["wrox.com"].name;//获取数据
var book = globalStorage["wrox.com"].getItem('book');//获取数据

如果不能确定域名,可以使用location.host作为属性名比较安全。

globalStorage["location.host"].name = 'mike';//保存数据
var name = globalStorage["location.host"].getItem('name');//获取数据

4.locaStorage

locaStorage对象在修订过的HTML5规范中作为持久保存客户端数据的方案取代了globalStorage。

locaStorage不能指定任何访问规则,规则实现就设定好了。要访问同一份locaStorage对象,页面就必须来自同一个域名,使用同一种协议,在同一个端口上,相当于globalStorage[“location.host”]。

locaStorage.setItem('name','mike');//使用方法存储数据
locaStorage.name = 'mike';//使用属性存储数据
var name = locaStorage.getItem('name');//使用方法获取数据
var name = locaStorage.name;//使用属性获取数据

兼容性写法:

function getLocalStorage(){
    if(typeof locaStorage == 'object'){
        return locaStorage;
    }else if(typeof globalStorage== 'object'){
        return globalStorage[location.host];
    }else{
        throw new Error("Local Storage not available.");
    }
}

5.storage 事件

对Storage 对象进行任何修改,都会在文档上触发storage 事件。

这里写图片描述


window.addEventListener('storage',function (e){//服务器环境运行
    txt.innerHTML='发生变化的key是:'+e.key+',旧的值是:'+e.oldValue+',新的值是:'+e.newValue+',修改数据的页面地址是:'+e.url;
},false);
<think>嗯,用户问的是本地存储可以储存内存,这可能需要先理解他们的具体问题是什么。首先,我需要明确“本地存储”和“内存”这两个术语在计算机科学中的定义,避免混淆。 本地存储通常指的是持久化存储设备,比如硬盘、SSD、USB驱动器等,用于长期保存数据,即使断电后数据也不会丢失。而内存(RAM)是临时存储,用于程序运行时快速访问数据,断电后数据会丢失。用户可能混淆了这两个概念,或者想知道本地存储是否能用来扩展内存。 接下来,考虑用户可能的实际需求。他们可能在开发网页应用,遇到浏览器本地存储(如LocalStorage)的使用问题,或者想了解如何利用本地存储来优化应用性能。也有可能是对计算机内存管理有疑问,想知道如何利用硬盘空间作为虚拟内存。 需要检查用户问题中的关键词:“本地存储可以储存内存”。可能的情况是,用户想了解是否能用本地存储作为内存的替代或扩展。例如,在浏览器环境中,LocalStorage用于存储数据,但和内存的功能不同。或者,在系统级别,使用硬盘空间作为虚拟内存,这确实是操作系统的一种做法。 然后,需要验证技术细节是否正确。例如,浏览器中的本地存储(如LocalStorage、SessionStorage)确实用于存储键值对数据,但它们属于持久化存储,不是内存。而虚拟内存技术允许操作系统使用硬盘空间模拟RAM,但这属于系统级管理,用户通常不直接操作。 用户可能的误区是将存储Storage)和内存(Memory)混为一谈,需要明确区分两者的特性和用途。此外,可能需要解释不同场景下的应用,比如Web开发中的本地存储使用,或系统内存管理中的虚拟内存。 还需要考虑用户的技术背景。如果是普通用户,可能需要更通俗的解释;如果是开发者,可能需要更详细的技术细节。根据问题中的“系统级指令”提到使用中文和LaTeX格式,用户可能是学生或技术人员,需要准确且结构化的回答。 最后,确保回答结构清晰,分点说明本地存储和内存的区别,以及它们的用途,纠正可能的误解,并举例说明它们在不同场景下的应用。同时,注意使用正确的术语和格式,如本地存储的技术名称和示例,避免混淆。</think>好的,我将逐步解释“本地存储”与“内存”的关系及区别: 1. **定义区分** - **内存 (Memory/RAM)**: $$ \text{随机存取存储器} \quad \text{(断电后数据丢失)} $$ 用于临时存储程序运行时的数据和指令,访问速度极快(纳秒级) - **本地存储 (Storage)**: $$ \text{持久化存储设备} \quad \text{(如硬盘/SSD/浏览器LocalStorage)} $$ 用于长期保存数据,速度较慢(毫秒级),如: - 计算机:$HDD/SSD/USB$ - 浏览器:$localStorage/sessionStorage/IndexedDB$ 2. **关键区别** | 特性 | 内存 (RAM) | 本地存储 | |---------------|---------------------|------------------------| | 数据生命周期 | 临时(断电消失) | 永久(需主动删除) | | 访问速度 | $10^{-9}$ 秒级别 | $10^{-3}$ 秒级别 | | 容量成本 | 较小且昂贵 | 较大且便宜 | 3. **常见误区澄清** - ❌ 错误说法: "可以用浏览器LocalStorage扩展内存" - ✅ 正确理解: LocalStorage只能存储字符串键值对(最大约5-10MB),不能直接替代内存运算功能 4. **特殊场景关联** - **虚拟内存**:操作系统通过硬盘空间模拟内存扩展 $$ \text{物理内存不足时,使用存储空间作为swap分区} $$ - **浏览器缓存**:通过Cache API或Service Workers将资源持久化存储,但本质上仍属于存储范畴 5. **开发者注意项** - 内存数据需手动释放(如JavaScript中的对象销毁) - 本地存储操作需要异步处理(避免界面卡顿) 示例代码差异: ```javascript // 内存操作(直接访问) let arr = new Array(1000000).fill(0); // 本地存储操作(异步API) localStorage.setItem('key', JSON.stringify(bigData)); ``` 总结:本地存储和内存是计算机系统中互补但不可互相替代的两种存储介质,理解它们的差异有助于优化程序设计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值