摘要:那么是否有既简单并且又不阻塞主线程的呢好消息是正在尝试一种称为内置模块的新功能,计划发布的第一个内置模块是名为的异步键值存储模块,先来了解一下什么是内置模块。
相信作为web开发者大家都使用过浏览器的本地存储localStorage,它是一个会阻止主线程的同步API,只要使用就可能会阻止页面的交互。
我们都知道浏览器有异步的IndexedDB作为存储方案,只是它的API使用方式比localStorage要复杂很多。
那么是否有既简单并且又不阻塞主线程的API呢?
好消息是Chrome正在尝试一种称为内置模块的新功能,计划发布的第一个内置模块是名为KV Storage的异步键/值存储模块,先来了解一下什么是内置模块。
内置模块内置模块就像常规JavaScript 模块一样,唯一区别是它们不必下载,而是随浏览器一起提供。
与传统的Web API一样,内置模块必须经过标准化过程 - 每个模块都有自己的规范,需要进行设计审查,并且在发布之前需要Web开发人员和其他浏览器供应商提供支持。
与传统的Web API不同,内置模块不会在全局范围内公开 它们只能通过导入获得。
不全局暴露内置模块有很多优点:它们不会增加任何开销来启动新的JavaScript运行时上下文,并且不会消耗任何内存或CPU。此外,可以避免与当前上下文变量命名冲突的风险。
在支持的浏览器中,您可以使用以下代码导入KV存储模块。
import {storage, StorageArea} from "std:kv-storage";KV存储模块
KV存储模块的简单性与localStorage API类似,但其API形状实际上更接近 JavaScriptMap。
除了getItem(), setItem()以及removeItem(),它还有get(), set()和delete()以及Map类似的方法,如 keys(), values()和 entries()。
键名不必是字符串。它们可以是任何结构化可序列化类型。
与Map不同的是,所有KV存储方法都返回 promises或 异步迭代器
KV存储模块对外暴露两个变量:storage和StorageArea,其中storage是StorageArea名为"default"的默认实例。
以下是如何在代码中使用KV存储模块的示例:
import {storage} from "std:kv-storage"; const main = async () => { const oldPreferences = await storage.get("preferences"); document.querySelector("form").addEventListener("submit", async () => { const newPreferences = Object.assign({}, oldPreferences, { // Updated preferences go here... }); await storage.set("preferences", newPreferences); }); }; main();如果浏览器不支持内置模块怎么办?
对于不支持内置模块的浏览器,std:kv-storage无法识别成有效的URL,这时可以通过引入polyfill解决,但如果浏览器支持内置模块,我们更希望的是优先使用内置提供的模块,这就需要一个导入映射的功能,也是chrome正在尝试的一个新功能。
导入映射导入映射本质上是一种机制,开发人员可以通过该机制将导入标识符另起别名,这可以为浏览器无法识别std:kv-storage的时侯提供备用路径。
代码示例:
上面代码中的关键点是URL /path/to/kv-storage-polyfill.mjs 被映射到两个不同的资源:std:kv-storage和 /path/to/kv-storage-polyfill.mjs。
因此,当浏览器遇到引用该URL(/path/to/kv-storage-polyfill.mjs)的import语句时,它首先尝试加载std:kv-storage,如果不能,则它会回退到加载 /path/to/kv-storage-polyfill.mjs。
# 那么根本不支持模块的浏览器呢?
为了使用导入映射有条件地加载内置模块,必须实际使用导入语句,这也意味着必须使用模块脚本,即。
目前,超过80%的浏览器支持模块,对于不支持模块的浏览器,可以使用module/nomodule技术为旧浏览器兼容。注意,在生成nomodule时,需要包含所有的polyfills,因为不支持模块的浏览器肯定不支持内置模块。
PS:欢迎关注公众号「前端新视界」获取前端技术前沿资讯,后台回复“1”领取100本PDF前端电子书籍。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/103479.html
摘要:前言本文旨在讲述如何使用语言实现基于算法的,分布式的,结构的存储项目。甚至像,可以利用实现分布式存储。核心组件包括一致性模块,通信,日志模块,状态机。状态机,可以是任何实现,其实质就是将日志中的内容进行处理。选举者优先选举自己将自 前言 本文旨在讲述如何使用 Java 语言实现基于 Raft 算法的,分布式的,KV 结构的存储项目。该项目的背景是为了深入理解 Raft 算法,从而深刻理...
摘要:以下正文的部分内容来自程序员面试笔试宝典书籍,如果转载请保留出处一什么是是一个开源免费高性能的分布式对象缓存系统,它基于一个存储键值对的来存储数据到内存中。预告面试常考内容之和将于本周三更新。 你好,是我琉忆。继上周(2019.2-11至2-15)发布的PHP面试常考内容之面向对象专题后,发布的第二个专题,感谢你的阅读。本周(2019.2-18至2-22)的文章内容点为以下几点,更新时...
阅读 2518·2021-11-25 09:43
阅读 1825·2021-09-22 15:26
阅读 3579·2019-08-30 15:56
阅读 1667·2019-08-30 15:55
阅读 1851·2019-08-30 15:54
阅读 764·2019-08-30 15:52
阅读 3093·2019-08-29 16:23
阅读 850·2019-08-29 12:43