9 JavaScript庫,用於使用本地存儲
HTML5本地存儲API(Web存儲的一部分)擁有極佳的瀏覽器支持率,並在越來越多的應用程序中得到應用。它擁有簡單的API,但也存在一些類似於cookie的缺點。
過去一年左右,我遇到過不少使用localStorage API的工具和庫,因此我將它們整理到這篇文章中,並附帶一些代碼示例和功能討論。
要點
- HTML5本地存儲API得到了廣泛支持,並在應用程序中越來越常用,但它也有一些類似於cookie的局限性。各種JavaScript庫已被開發出來以改進和擴展其功能。
- Lockr、store.js和lscache等庫為localStorage API提供了包裝器,提供了額外的使用方法和功能。這些包括存儲不同數據類型而無需手動轉換、更深入的瀏覽器支持以及對內存對象緩存系統Memcached的模擬。
- secStore.js和localForage等一些庫提供了更專業的功能。 secStore.js通過Stanford Javascript Crypto Library增加了一層安全性,而Mozilla構建的localForage則提供了一個使用IndexedDB或WebSQL的異步存儲API。
- Basil.js和lz-string等其他庫提供了獨特的功能。 Basil.js是一個統一的localStorage、sessionStorage和cookie API,允許定義命名空間、存儲方法優先級和默認存儲。 lz-string允許通過壓縮在localStorage中存儲大量數據。
Lockr
Lockr是localStorage API的包裝器,允許您使用許多有用的方法和功能。例如,雖然localStorage僅限於存儲字符串,但Lockr允許您存儲不同數據類型,而無需自行進行轉換:
Lockr.set('website', 'SitePoint'); // 字符串 Lockr.set('categories', 8); // 数字 Lockr.set('users', [{ name: 'John Doe', age: 18 }, { name: 'Jane Doe', age: 19 }]); // 对象
其他功能包括:
- 使用Lockr.get()方法檢索所有鍵值對
- 使用Lockr.getAll()方法將所有鍵值對編譯成數組
- 使用Lockr.flush()方法刪除所有存儲的鍵值對
- 使用Lockr.sadd和Lockr.srem在哈希鍵下添加/刪除值
本地存儲橋接器 (The Local Storage Bridge)
一個1KB的庫,用於使用localStorage作為通信通道來促進同一瀏覽器中選項卡之間的消息交換。包含庫後,以下是您可以使用的示例代碼:
// 发送消息 lsbridge.send('my-namespace', { message: 'Hello world!' }); // 监听消息 lsbridge.subscribe('my-namespace', function(data) { console.log(data); // 打印:'Hello world!' });
如所示,send()方法創建並發送消息,subscribe()方法允許您監聽指定的消息。您可以在這篇博文中閱讀更多關於該庫的信息。
Barn
這個庫提供了一個類似Redis的API,在localStorage之上提供了一個“快速、原子化的持久存儲層”。以下是從repo的README中獲取的示例代碼片段。它演示了許多可用的方法。
Lockr.set('website', 'SitePoint'); // 字符串 Lockr.set('categories', 8); // 数字 Lockr.set('users', [{ name: 'John Doe', age: 18 }, { name: 'Jane Doe', age: 19 }]); // 对象
API的其他功能包括能夠使用起始/結束值獲取範圍、獲取項目數組以及壓縮整個數據存儲以節省空間。該repo包含所有方法及其功能的完整參考。
store.js
這是一個類似於Lockr的另一個包裝器,但這次通過回退提供了更深入的瀏覽器支持。 README解釋說,“store.js在可用時使用localStorage,並在IE6和IE7中回退到userData行為。沒有Flash來減慢頁面加載速度。沒有cookie來增加網絡請求的負擔。”
基本API在以下代碼中的註釋中進行了解釋:
// 发送消息 lsbridge.send('my-namespace', { message: 'Hello world!' }); // 监听消息 lsbridge.subscribe('my-namespace', function(data) { console.log(data); // 打印:'Hello world!' });
此外,還有一些更高級的功能:
var barn = new Barn(localStorage); barn.set('key', 'val'); console.log(barn.get('key')); // val barn.lpush('list', 'val1'); barn.lpush('list', 'val2'); console.log(barn.rpop('list')); // val1 console.log(barn.rpop('list')); // val2 barn.sadd('set', 'val1'); barn.sadd('set', 'val2'); barn.sadd('set', 'val3'); console.log(barn.smembers('set')); // ['val1', 'val2', 'val3'] barn.srem('set', 'val3'); console.log(barn.smembers('set')); // ['val1', 'val2']
GitHub repo上的README詳細介紹了瀏覽器支持的深度以及需要考慮的潛在錯誤和陷阱(例如,某些瀏覽器不允許在隱私模式下使用本地存儲)。
lscache
lscache是另一個localStorage包裝器,但具有一些額外功能。您可以將其用作簡單的localStorage API,也可以使用模擬Memcached(內存對象緩存系統)的功能。
lscache公開了以下方法,在代碼中的註釋中進行了描述:
// 在'website'中存储'SitePoint' store.set('website', 'SitePoint'); // 获取'website' store.get('website'); // 删除'website' store.remove('website'); // 清除所有键 store.clear();
與之前的庫一樣,這個庫也處理序列化,因此您可以存儲和檢索對象:
// 存储对象字面量;在后台使用JSON.stringify store.set('website', { name: 'SitePoint', loves: 'CSS' }); // 获取存储的对象;在后台使用JSON.parse var website = store.get('website'); console.log(website.name + ' loves ' + website.loves); // 获取所有存储的值 console.log(store.getAll()); // 循环遍历所有存储的值 store.forEach(function(key, val) { console.log(key, val); });
最後,lscache允許您將數據劃分到“桶”中。看看這段代碼:
// 设置一个带有2分钟过期时间的问候语 lscache.set('greeting', 'Hello World!', 2); // 获取并显示问候语 console.log(lscache.get('greeting')); // 删除问候语 lscache.remove('greeting'); // 刷新整个缓存项目 lscache.flush(); // 只刷新过期的项目 lscache.flushExpired();
請注意,在第二個日誌中,結果為null。這是因為我在記錄結果之前設置了一個自定義桶。一旦我設置了一個桶,在此之前添加到lscache的任何內容都將無法訪問,即使我嘗試刷新它也是如此。只有“other”桶中的項目是可訪問或可刷新的。然後,當我重置桶時,我能夠再次訪問我的原始數據。
secStore.js
secStore.js是一個數據存儲API,它通過Stanford Javascript Crypto Library添加了一層可選的安全層。 secStore.js允許您選擇存儲方法:localStorage、sessionStorage或cookie。要使用secStore.js,您還必須包含前面提到的sjcl.js庫。
以下是一個示例,演示如何在將encrypt選項設置為“true”的情況下保存一些數據:
lscache.set('website', { 'name': 'SitePoint', 'category': 'CSS' }, 4); // 从对象中检索数据 console.log(lscache.get('website').name); console.log(lscache.get('website').category);
請注意使用的set()方法,它傳入您指定的選項(包括自定義數據)以及允許您測試結果的回調函數。然後,我們可以使用get()方法檢索該數據:
lscache.set('website', 'SitePoint', 2); console.log(lscache.get('website')); // 'SitePoint' lscache.setBucket('other'); console.log(lscache.get('website')); // null lscache.resetBucket(); console.log(lscache.get('website')); // 'SitePoint'
如果您想使用sessionStorage或cookie而不是secStore.js中的localStorage,您可以在選項中定義:
var storage = new secStore; var options = { encrypt: true, data: { key: 'data goes here' } }; storage.set(options, function(err, results) { if (err) throw err; console.log(results); });
localForage
這個由Mozilla構建的庫為您提供了一個簡單的類似localStorage的API,但通過IndexedDB或WebSQL使用異步存儲。 API與localStorage(getItem()、setItem()等)完全相同,只是它的API是異步的,語法需要使用回調。
因此,例如,無論您設置還是獲取值,您都不會獲得返回值,但您可以處理傳遞給回調函數的數據,並且(可選)處理錯誤:
Lockr.set('website', 'SitePoint'); // 字符串 Lockr.set('categories', 8); // 数字 Lockr.set('users', [{ name: 'John Doe', age: 18 }, { name: 'Jane Doe', age: 19 }]); // 对象
關於localForage的其他一些要點:
- 支持使用JavaScript Promise
- 與其他庫一樣,不僅限於存儲字符串,還可以設置和獲取對象
- 允許您使用config()方法設置數據庫信息
Basil.js
Basil.js被描述為一個統一的localStorage、sessionStorage和cookie API,它包含一些獨特且非常易於使用的功能。基本方法可以按如下所示使用:
// 发送消息 lsbridge.send('my-namespace', { message: 'Hello world!' }); // 监听消息 lsbridge.subscribe('my-namespace', function(data) { console.log(data); // 打印:'Hello world!' });
您還可以使用Basil.js來測試localStorage是否可用:
var barn = new Barn(localStorage); barn.set('key', 'val'); console.log(barn.get('key')); // val barn.lpush('list', 'val1'); barn.lpush('list', 'val2'); console.log(barn.rpop('list')); // val1 console.log(barn.rpop('list')); // val2 barn.sadd('set', 'val1'); barn.sadd('set', 'val2'); barn.sadd('set', 'val3'); console.log(barn.smembers('set')); // ['val1', 'val2', 'val3'] barn.srem('set', 'val3'); console.log(barn.smembers('set')); // ['val1', 'val2']
Basil.js還允許您使用cookie或sessionStorage:
// 在'website'中存储'SitePoint' store.set('website', 'SitePoint'); // 获取'website' store.get('website'); // 删除'website' store.remove('website'); // 清除所有键 store.clear();
最後,在選項對像中,您可以使用選項對象定義以下內容:
- 數據不同部分的命名空間
- 要使用的存儲方法的優先級順序
- 默認存儲方法
- cookie的過期日期
// 存储对象字面量;在后台使用JSON.stringify store.set('website', { name: 'SitePoint', loves: 'CSS' }); // 获取存储的对象;在后台使用JSON.parse var website = store.get('website'); console.log(website.name + ' loves ' + website.loves); // 获取所有存储的值 console.log(store.getAll()); // 循环遍历所有存储的值 store.forEach(function(key, val) { console.log(key, val); });
lz-string
lz-string實用程序允許您通過使用壓縮在localStorage中存儲大量數據,並且它非常易於使用。在頁面上包含庫後,您可以執行以下操作:
// 设置一个带有2分钟过期时间的问候语 lscache.set('greeting', 'Hello World!', 2); // 获取并显示问候语 console.log(lscache.get('greeting')); // 删除问候语 lscache.remove('greeting'); // 刷新整个缓存项目 lscache.flush(); // 只刷新过期的项目 lscache.flushExpired();
請注意compress()和decompress()方法的使用。上面代碼中的註釋顯示了壓縮前後的長度值。您可以看到這將多麼有益,因為客戶端存儲總是空間有限。
正如庫文檔中所解釋的,可以選擇將數據壓縮為Uint8Array(JavaScript中一種較新的數據類型),甚至可以壓縮數據以在客戶端外部存儲。
值得一提的 (Honorable Mentions)
上述工具可能可以幫助您完成在localStorage中幾乎所有想要做的事情,但如果您正在尋找更多內容,以下是一些您可能想要查看的更多相關工具和庫。
- LokiJS – 一個快速、內存中的面向文檔的數據存儲,適用於node.js、瀏覽器和Cordova。
- AngularJS的客戶端存儲 – Angular JS的命名空間客戶端存儲。寫入localStorage,並回退到cookie。除了Angular核心之外沒有其他外部依賴項;不依賴於ngCookies。
- AlaSQL.js – 瀏覽器的JavaScript SQL數據庫和Node.js。處理傳統的關聯表和嵌套JSON數據(NoSQL)。從localStorage、IndexedDB或Excel導出、存儲和導入數據。
- angular-locker – Angular項目中本地/會話存儲的簡單且可配置的抽象,提供功能強大且易於使用的流暢API。
- jsCache – 使用localStorage啟用JavaScript文件、CSS樣式表和圖像的緩存。
- LargeLocalStorage – 克服各種瀏覽器缺陷,在客戶端提供大型鍵值存儲。
您知道其他庫嗎?
如果您在localStorage API或相關工具之上構建了一些增強客戶端存儲的工具,請隨時在評論中告訴我們。
(文章剩餘部分為FAQ,已根據原文進行改寫和精簡,並保持原意)
關於JavaScript本地存儲庫的常見問題 (FAQ)
問:使用JavaScript本地存儲庫的好處是什麼?
答:JavaScript本地存儲庫提供了許多好處。它們提供了一種更有效的方式來在客戶端存儲數據,這可以顯著提高Web應用程序的性能。這些庫還提供了比傳統數據存儲方法更高的安全級別,因為它們允許數據加密。此外,它們還為數據管理提供了更用戶友好的界面,使開發人員更容易使用本地存儲。
問:JavaScript中的本地存儲是如何工作的?
答:JavaScript中的本地存儲允許Web應用程序在Web瀏覽器中持久存儲數據。與cookie不同,本地存儲不會過期,也不會發送回服務器,這使其成為一種更有效的數據存儲方法。存儲在本地存儲中的數據會跨瀏覽器會話保存,這意味著即使關閉並重新打開瀏覽器,它仍然可用。
問:我可以將本地存儲用於敏感數據嗎?
答:雖然本地存儲提供了一種方便的方式來在客戶端存儲數據,但不建議將其用於存儲敏感數據。這是因為本地存儲並非設計為安全的存儲機制。存儲在本地存儲中的數據可以使用簡單的JavaScript代碼輕鬆訪問和操作。因此,不應將密碼、信用卡號碼或個人用戶信息等敏感數據存儲在本地存儲中。
問:如何管理本地存儲中的數據?
答:管理本地存儲中的數據涉及三個主要操作:設置項目、獲取項目和刪除項目。要設置項目,您可以使用setItem()方法,該方法接受兩個參數:鍵和值。要檢索項目,您可以使用getItem()方法,該方法接受鍵作為參數並返回相應的值。要刪除項目,您可以使用removeItem()方法,該方法接受鍵作為參數。
問:一些流行的JavaScript本地存儲庫有哪些?
答:有幾個流行的JavaScript本地存儲庫,包括store.js、localForage和js-cookie。 Store.js為本地存儲提供了一個簡單且一致的API,並且可在所有主要瀏覽器上運行。 LocalForage提供了一個強大的異步存儲API,並支持IndexedDB、WebSQL和localStorage。 Js-cookie是一個用於處理cookie的輕量級庫,可以在本地存儲不可用時用作後備。
問:如何檢查本地存儲是否可用?
答:您可以使用JavaScript中的簡單try/catch塊來檢查本地存儲是否可用。 window.localStorage屬性可用於訪問本地存儲對象。如果此屬性存在並且可以用於設置和檢索項目,則本地存儲可用。
問:本地存儲的存儲限制是多少?
答:本地存儲的存儲限制因不同的瀏覽器而異,但通常約為5MB。這比cookie的存儲限制(只有4KB)要大得多。但是,最好還是注意您在本地存儲中存儲的數據量,因為過多的數據可能會減慢Web應用程序的速度。
問:本地存儲可以在不同的瀏覽器之間共享嗎?
答:不可以,本地存儲不能在不同的瀏覽器之間共享。每個Web瀏覽器都有自己獨立的本地存儲,因此在一個瀏覽器中存儲的數據在另一個瀏覽器中將不可用。在設計依賴於本地存儲的Web應用程序時,這一點很重要。
問:如何清除本地存儲中的所有數據?
答:您可以使用clear()方法清除本地存儲中的所有數據。此方法不接受任何參數,並將從本地存儲中刪除所有項目。使用此方法時要小心,因為它會永久刪除本地存儲中的所有數據。
問:本地存儲可以在移動設備上使用嗎?
答:可以,本地存儲可以在移動設備上使用。大多數現代移動Web瀏覽器都支持本地存儲,因此您可以在台式機和移動設備上使用它來存儲數據。但是,移動設備上的存儲限制可能較低,因此在設計Web應用程序時務必考慮這一點。
以上是9 JavaScript庫,用於使用本地存儲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務
