赞
踩
点赞 + 收藏 === 学会
首先明确一点,localStorage是同步的
localStorage 是 Web Storage API 的一部分,它提供了一种存储键值对的机制。localStorage 的数据是持久存储在用户的硬盘上的,而不是内存。这意味着即使用户关闭浏览器或电脑,localStorage 中的数据也不会丢失,除非主动清除浏览器缓存或者使用代码删除。
当你通过 JavaScript 访问 localStorage 时,浏览器会从硬盘中读取数据或向硬盘写入数据。然而,在读写操作期间,数据可能会被暂时存放在内存中,以提高处理速度。但主要的特点是它的持久性,以及它不依赖于会话的持续性。
是的,硬盘确实是一个 IO 设备,而大部分与硬盘相关的操作系统级IO操作确实是异步进行的,以避免阻塞进程。不过,在 Web 浏览器环境中,localStorage 的API是设计为同步的,即使底层的硬盘读写操作有着IO的特性。
js代码在访问 localStorage 时,浏览器提供的API接口通常会处于js执行线程上下文中直接调用。这意味着尽管硬盘是IO设备,当一个js执行流程访问 localStorage 时,它将同步地等待数据读取或写入完成,该过程中js执行线程会阻塞。
这种同步API设计意味着开发者在操作 localStorage 时不需要考虑回调函数或者Promise等异步处理模式,可以按照同步代码的方式来编写。不过,这也意味着如果涉及较多数据的读写操作时,可能对性能产生负面影响,特别是在主线程上,因为它会阻塞UI的更新和其他js的执行。
localStorage 实现同步存储的方式就是阻塞 JavaScript 的执行,直到数据的读取或者写入操作完成。这种同步操作的实现可以简单概述如下:
在同步的 localStorage 操作期间,由于 js 的单线程性质,整个线程会阻塞,即不会执行其他任何js代码,也不会进行任何渲染操作,直到 localStorage 调用返回。
虽然它们提供了更大的存储空间和更丰富的功能,但确实潜在地也可能被滥用。但是与相比 localStorage 增加了一些特性用来降低被滥用的风险:
其实也不用测,平时写的时候你也没用异步的方式写localStorage吧,我们这里简单写个例子
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
-
- <body>
- <script>
- const testLocalStorage = () => {
- console.log("==========> 设置localStorage之前");
- localStorage.setItem('testLocalStorage', '我是同步的');
- console.log("==========> 获取localStorage之前");
- console.log('=========获取localStorage', localStorage.getItem('testLocalStorage'))
- console.log("==========> 获取localStorage之后");
- }
-
- testLocalStorage()
- </script>
- </body>
-
- </html>
如果您看到这里了,并且觉得这篇文章对您有所帮助,希望您能够点赞和收藏⭐支持一下作者,感谢!如果文中有任何不准确之处,也欢迎您指正,共同进步。感谢您的阅读,期待您的点赞和收藏⭐!
原文链接:
https://juejin.cn/post/7359405716090011659
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。