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中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

將矩陣電影特效帶入你的網頁!這是一個基於著名電影《黑客帝國》的酷炫jQuery插件。該插件模擬了電影中經典的綠色字符特效,只需選擇一張圖片,插件就會將其轉換為充滿數字字符的矩陣風格畫面。快來試試吧,非常有趣! 工作原理 插件將圖片加載到畫布上,讀取像素和顏色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地讀取圖片的矩形區域,並利用jQuery計算每個區域的平均顏色。然後,使用

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

本文將引導您使用jQuery庫創建一個簡單的圖片輪播。我們將使用bxSlider庫,它基於jQuery構建,並提供許多配置選項來設置輪播。 如今,圖片輪播已成為網站必備功能——一圖胜千言! 決定使用圖片輪播後,下一個問題是如何創建它。首先,您需要收集高質量、高分辨率的圖片。 接下來,您需要使用HTML和一些JavaScript代碼來創建圖片輪播。網絡上有很多庫可以幫助您以不同的方式創建輪播。我們將使用開源的bxSlider庫。 bxSlider庫支持響應式設計,因此使用此庫構建的輪播可以適應任何

核心要点 利用 JavaScript 增强结构化标记可以显著提升网页内容的可访问性和可维护性,同时减小文件大小。 JavaScript 可有效地用于为 HTML 元素动态添加功能,例如使用 cite 属性自动在块引用中插入引用链接。 将 JavaScript 与结构化标记集成,可以创建动态用户界面,例如无需页面刷新的选项卡面板。 确保 JavaScript 增强功能不会妨碍网页的基本功能至关重要;即使禁用 JavaScript,页面也应保持功能正常。 可以使用高级 JavaScript 技术(

數據集對於構建API模型和各種業務流程至關重要。這就是為什麼導入和導出CSV是經常需要的功能。在本教程中,您將學習如何在Angular中下載和導入CSV文件


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

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

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中