摘要:那么是否有既簡單并且又不阻塞主線程的呢好消息是正在嘗試一種稱為內(nèi)置模塊的新功能,計(jì)劃發(fā)布的第一個(gè)內(nèi)置模塊是名為的異步鍵值存儲(chǔ)模塊,先來了解一下什么是內(nèi)置模塊。
相信作為web開發(fā)者大家都使用過瀏覽器的本地存儲(chǔ)localStorage,它是一個(gè)會(huì)阻止主線程的同步API,只要使用就可能會(huì)阻止頁面的交互。
我們都知道瀏覽器有異步的IndexedDB作為存儲(chǔ)方案,只是它的API使用方式比localStorage要復(fù)雜很多。
那么是否有既簡單并且又不阻塞主線程的API呢?
好消息是Chrome正在嘗試一種稱為內(nèi)置模塊的新功能,計(jì)劃發(fā)布的第一個(gè)內(nèi)置模塊是名為KV Storage的異步鍵/值存儲(chǔ)模塊,先來了解一下什么是內(nèi)置模塊。
內(nèi)置模塊內(nèi)置模塊就像常規(guī)JavaScript 模塊一樣,唯一區(qū)別是它們不必下載,而是隨瀏覽器一起提供。
與傳統(tǒng)的Web API一樣,內(nèi)置模塊必須經(jīng)過標(biāo)準(zhǔn)化過程 - 每個(gè)模塊都有自己的規(guī)范,需要進(jìn)行設(shè)計(jì)審查,并且在發(fā)布之前需要Web開發(fā)人員和其他瀏覽器供應(yīng)商提供支持。
與傳統(tǒng)的Web API不同,內(nèi)置模塊不會(huì)在全局范圍內(nèi)公開 它們只能通過導(dǎo)入獲得。
不全局暴露內(nèi)置模塊有很多優(yōu)點(diǎn):它們不會(huì)增加任何開銷來啟動(dòng)新的JavaScript運(yùn)行時(shí)上下文,并且不會(huì)消耗任何內(nèi)存或CPU。此外,可以避免與當(dāng)前上下文變量命名沖突的風(fēng)險(xiǎn)。
在支持的瀏覽器中,您可以使用以下代碼導(dǎo)入KV存儲(chǔ)模塊。
import {storage, StorageArea} from "std:kv-storage";KV存儲(chǔ)模塊
KV存儲(chǔ)模塊的簡單性與localStorage API類似,但其API形狀實(shí)際上更接近 JavaScriptMap。
除了getItem(), setItem()以及removeItem(),它還有get(), set()和delete()以及Map類似的方法,如 keys(), values()和 entries()。
鍵名不必是字符串。它們可以是任何結(jié)構(gòu)化可序列化類型。
與Map不同的是,所有KV存儲(chǔ)方法都返回 promises或 異步迭代器
KV存儲(chǔ)模塊對外暴露兩個(gè)變量:storage和StorageArea,其中storage是StorageArea名為"default"的默認(rèn)實(shí)例。
以下是如何在代碼中使用KV存儲(chǔ)模塊的示例:
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();如果瀏覽器不支持內(nèi)置模塊怎么辦?
對于不支持內(nèi)置模塊的瀏覽器,std:kv-storage無法識(shí)別成有效的URL,這時(shí)可以通過引入polyfill解決,但如果瀏覽器支持內(nèi)置模塊,我們更希望的是優(yōu)先使用內(nèi)置提供的模塊,這就需要一個(gè)導(dǎo)入映射的功能,也是chrome正在嘗試的一個(gè)新功能。
導(dǎo)入映射導(dǎo)入映射本質(zhì)上是一種機(jī)制,開發(fā)人員可以通過該機(jī)制將導(dǎo)入標(biāo)識(shí)符另起別名,這可以為瀏覽器無法識(shí)別std:kv-storage的時(shí)侯提供備用路徑。
代碼示例:
上面代碼中的關(guān)鍵點(diǎn)是URL /path/to/kv-storage-polyfill.mjs 被映射到兩個(gè)不同的資源:std:kv-storage和 /path/to/kv-storage-polyfill.mjs。
因此,當(dāng)瀏覽器遇到引用該URL(/path/to/kv-storage-polyfill.mjs)的import語句時(shí),它首先嘗試加載std:kv-storage,如果不能,則它會(huì)回退到加載 /path/to/kv-storage-polyfill.mjs。
# 那么根本不支持模塊的瀏覽器呢?
為了使用導(dǎo)入映射有條件地加載內(nèi)置模塊,必須實(shí)際使用導(dǎo)入語句,這也意味著必須使用模塊腳本,即。
目前,超過80%的瀏覽器支持模塊,對于不支持模塊的瀏覽器,可以使用module/nomodule技術(shù)為舊瀏覽器兼容。注意,在生成nomodule時(shí),需要包含所有的polyfills,因?yàn)椴恢С帜K的瀏覽器肯定不支持內(nèi)置模塊。
PS:歡迎關(guān)注公眾號「前端新視界」獲取前端技術(shù)前沿資訊,后臺(tái)回復(fù)“1”領(lǐng)取100本PDF前端電子書籍。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103479.html
摘要:前言本文旨在講述如何使用語言實(shí)現(xiàn)基于算法的,分布式的,結(jié)構(gòu)的存儲(chǔ)項(xiàng)目。甚至像,可以利用實(shí)現(xiàn)分布式存儲(chǔ)。核心組件包括一致性模塊,通信,日志模塊,狀態(tài)機(jī)。狀態(tài)機(jī),可以是任何實(shí)現(xiàn),其實(shí)質(zhì)就是將日志中的內(nèi)容進(jìn)行處理。選舉者優(yōu)先選舉自己將自 前言 本文旨在講述如何使用 Java 語言實(shí)現(xiàn)基于 Raft 算法的,分布式的,KV 結(jié)構(gòu)的存儲(chǔ)項(xiàng)目。該項(xiàng)目的背景是為了深入理解 Raft 算法,從而深刻理...
摘要:以下正文的部分內(nèi)容來自程序員面試筆試寶典書籍,如果轉(zhuǎn)載請保留出處一什么是是一個(gè)開源免費(fèi)高性能的分布式對象緩存系統(tǒng),它基于一個(gè)存儲(chǔ)鍵值對的來存儲(chǔ)數(shù)據(jù)到內(nèi)存中。預(yù)告面試常考內(nèi)容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發(fā)布的PHP面試常考內(nèi)容之面向?qū)ο髮n}后,發(fā)布的第二個(gè)專題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)...
閱讀 2582·2021-11-25 09:43
閱讀 1855·2021-09-22 15:26
閱讀 3726·2019-08-30 15:56
閱讀 1710·2019-08-30 15:55
閱讀 1892·2019-08-30 15:54
閱讀 810·2019-08-30 15:52
閱讀 3154·2019-08-29 16:23
閱讀 891·2019-08-29 12:43