首页 > 其他分享 >说一说浏览器的本地存储?各自优劣如何?

说一说浏览器的本地存储?各自优劣如何?

时间:2024-12-13 16:55:21浏览次数:3  
标签:存储 说一说 浏览器 优劣 域名 localStorage sessionStorage Cookie

浏览器的本地存储主要分为CookieWebStorageIndexedDB, 其中WebStorage又可以分为localStoragesessionStorage。接下来我们就来一一分析这些本地存储方案。

Cookie

Cookie 最开始被设计出来其实并不是来做本地存储的,而是为了弥补HTTP状态管理上的不足

HTTP 协议是一个无状态协议,客户端向服务器发请求,服务器返回响应,故事就这样结束了,但是下次发请求如何让服务端知道客户端是谁呢?

这种背景下,就产生了 Cookie.

Cookie 本质上就是浏览器里面存储的一个很小的文本文件,内部以键值对的方式来存储(在chrome开发者面板的Application这一栏可以看到)。向同一个域名下发送请求,都会携带相同的 Cookie,服务器拿到 Cookie 进行解析,便能拿到客户端的状态。

Cookie 的作用很好理解,就是用来做状态存储的,但它也是有诸多致命的缺陷的:

  1. 容量缺陷。Cookie 的体积上限只有4KB,只能用来存储少量的信息。

  2. 性能缺陷。Cookie 紧跟域名,不管域名下面的某一个地址需不需要这个 Cookie ,请求都会携带上完整的 Cookie,这样随着请求数的增多,其实会造成巨大的性能浪费的,因为请求携带了很多不必要的内容。

  3. 安全缺陷。由于 Cookie 以纯文本的形式在浏览器和服务器中传递,很容易被非法用户截获,然后进行一系列的篡改,在 Cookie 的有效期内重新发送给服务器,这是相当危险的。另外,在HttpOnly为 false 的情况下,Cookie 信息能直接通过 JS 脚本来读取。

localStorage

和Cookie异同

localStorage有一点跟Cookie一样,就是针对一个域名,即在同一个域名下,会存储相同的一段localStorage

不过它相对Cookie还是有相当多的区别的:

  1. 容量。localStorage 的容量上限为5M,相比于Cookie的 4K 大大增加。当然这个 5M 是针对一个域名的,因此对于一个域名是持久存储的。

  2. 只存在客户端,默认不参与与服务端的通信。这样就很好地避免了 Cookie 带来的性能问题安全问题

  3. 接口封装。通过localStorage暴露在全局,并通过它的 setItemgetItem等方法进行操作,非常方便。

操作方式

接下来我们来具体看看如何来操作localStorage

let obj = { name: "sanyuan", age: 18 };
localStorage.setItem("name", "sanyuan"); 
localStorage.setItem("info", JSON.stringify(obj));

接着进入相同的域名时就能拿到相应的值:

let name = localStorage.getItem("name");
let info = JSON.parse(localStorage.getItem("info"));

从这里可以看出,localStorage其实存储的都是字符串,如果是存储对象需要调用JSONstringify方法,并且用JSON.parse来解析成对象。

应用场景

利用localStorage的较大容量和持久特性,可以利用localStorage存储一些内容稳定的资源,比如官网的logo,存储Base64格式的图片资源,因此利用localStorage

sessionStorage

特点

sessionStorage以下方面和localStorage一致:

  • 容量。容量上限也为 5M。
  • 只存在客户端,默认不参与与服务端的通信。
  • 接口封装。除了sessionStorage名字有所变化,存储方式、操作方式均和localStorage一样。

sessionStoragelocalStorage有一个本质的区别,那就是前者只是会话级别的存储,并不是持久化存储。会话结束,也就是页面关闭,这部分sessionStorage就不复存在了。

应用场景

  1. 可以用它对表单信息进行维护,将表单信息存储在里面,可以保证页面即使刷新也不会让之前的表单信息丢失。
  2. 可以用它存储本次浏览记录。如果关闭页面后不需要这些记录,用sessionStorage就再合适不过了。事实上微博就采取了这样的存储方式。

IndexedDB

IndexedDB是运行在浏览器中的非关系型数据库, 本质上是数据库,绝不是和刚才WebStorage的 5M 一个量级,理论上这个容量是没有上限的。

关于它的使用,本文侧重原理,而且 MDN 上的教程文档已经非常详尽,这里就不做赘述了,感兴趣可以看一下使用文档

接着我们来分析一下IndexedDB的一些重要特性,除了拥有数据库本身的特性,比如支持事务存储二进制数据,还有这样一些特性需要格外注意:

  1. 键值对存储。内部采用对象仓库存放数据,在这个对象仓库中数据采用键值对的方式来存储。
  2. 异步操作。数据库的读写属于 I/O 操作, 浏览器中对异步 I/O 提供了支持。
  3. 受同源策略限制,即无法访问跨域的数据库。

总结

浏览器中各种本地存储和缓存技术的发展,给前端应用带来了大量的机会,PWA 也正是依托了这些优秀的存储方案才得以发展起来。重新梳理一下这些本地存储方案:

  1. cookie并不适合存储,而且存在非常多的缺陷。
  2. Web Storage包括localStoragesessionStorage, 默认不会参与和服务器的通信。
  3. IndexedDB为运行在浏览器上的非关系型数据库,为大型数据的存储提供了接口。

 

标签:存储,说一说,浏览器,优劣,域名,localStorage,sessionStorage,Cookie
From: https://www.cnblogs.com/cdyun/p/18605295

相关文章

  • Google Chrome谷歌浏览器离线/绿色版本安装与彻底卸载
    一、离线安装1.下载官方最新安装包安装直接下载链接Windows32位最新稳定版:https://dl.google.com/tag/s/installdataindex/update2/installers/ChromeStandaloneSetup.exeWindows64位最新稳定版:https://dl.google.com/tag/s/installdataindex/update2/installers/Chrom......
  • 深度剖析 ToF 技术:原理、优劣、数据纠错与工业应用全解析
    1 引言飞行时间(Time-of-Flight,简称ToF)技术是一种先进的三维成像技术,其工作机制与三维激光扫描技术有着相似之处。ToF技术的主要优势在于其能够一次性捕获整个场景的深度信息,而不是通过逐点扫描的方式来获取,这使得它特别适合于动态环境的三维成像。ToF相机通过捕捉光脉冲的......
  • 打开浏览器访问网页时,显示无法连接到代理服务器,解决方案
    打开浏览器,访问任何网页都提示说检查代理服务器解决方案:1、win+r打开运行窗口2、输入inetcpl.cpl进入Internet属性界面3、选择连接-->局域网(LAN)设置4、点击局域网设置,将代理服务器的选框取消勾选5、再次访问网页,就可以正常访问了......
  • 说一说浏览器缓存
    缓存是性能优化中非常重要的一环,浏览器的缓存机制对开发也是非常重要的知识点。接下来以三个部分来把浏览器的缓存机制说清楚:强缓存协商缓存缓存位置强缓存浏览器中的缓存作用分为两种情况,一种是需要发送HTTP请求,一种是不需要发送。首先是检查强缓存,这个阶段不需要发送H......
  • 解决Win11和Win10中谷歌Chrome浏览器速度慢问题的7种方法
    解决Win11和Win10中谷歌Chrome浏览器速度慢问题的7种方法,最近看到很多网友反映Win11/10中谷歌Chrome浏览器速度慢,所以今天小编就为大家带来了7种方法解决Win11和Win10中谷歌Chrome浏览器速度慢问题,一起看看吧。1、重启电脑让我们试试这个技巧来修复Windows11和Wi......
  • 获取浏览器摄像头
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>CameraCapture</title>&......
  • Edge浏览器使用洛谷账号远程提交配置说明
    首先,我们需要打开Edge浏览器并登录洛谷并且确保你已经登录了洛谷的账号,像这样:然后按F12按钮打开Edge的开发人员工具(可能会问你是否打开开发人员工具,选择“是”)在开发工具中找到“应用程序”,如下(我这里是点击了“+”号,然后再找到“应用程序”的):点击应用程序后,展开......
  • 怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
    本文引用怎么禁用vscode中点击go包名时自动打开浏览器跳转到pkg.go.dev在vscode设置项中配置gopls的ui.navigation.importShortcut为Definition即可。"gopls":{"ui.navigation.importShortcut":"Definition"}ui.navigation.importShortcut接受的值:"......
  • 浏览器搜索常用/非常用技巧
    使用符号的时候需要带上空格使用关键词的时候需要带上:,并且:后面没有空格常用符号+:链接搜索多个关键词-:不搜索-之后的东西OR/|:二者之间存在一者即可"":精准搜索,必须包含这些关键词*:类似shell脚本里面的通配符非常用符号@:用来搜索社交媒体,例如@twitter......
  • 请说说你在写布局时对于浏览器兼容性的感受或总结
    在前端开发中,处理浏览器兼容性问题就像一场永无止境的战斗,令人既爱又恨。编写能够在不同浏览器(Chrome、Firefox、Safari、Edge,更不用说各种移动浏览器)和它们的各种版本中良好运行的布局代码,需要技巧、耐心和大量的测试。以下是我对浏览器兼容性的一些感受和总结:痛点:CSS前缀:......