搜索
首页web前端js教程9 JavaScript库,用于使用本地存储

9 JavaScript Libraries for Working with Local Storage

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中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript的演变:当前的趋势和未来前景JavaScript的演变:当前的趋势和未来前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

神秘的JavaScript:它的作用以及为什么重要神秘的JavaScript:它的作用以及为什么重要Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python还是JavaScript更好?Python还是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安装JavaScript?如何安装JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安装,因为它已内置于现代浏览器中。你只需文本编辑器和浏览器即可开始使用。1)在浏览器环境中,通过标签嵌入HTML文件中运行。2)在Node.js环境中,下载并安装Node.js后,通过命令行运行JavaScript文件。

在Quartz中如何在任务开始前发送通知?在Quartz中如何在任务开始前发送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前发送任务通知在使用Quartz定时器进行任务调度时,任务的执行时间是由cron表达式设定的。现�...

在JavaScript中,如何在构造函数中获取原型链上函数的参数?在JavaScript中,如何在构造函数中获取原型链上函数的参数?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何获取原型链上函数的参数在JavaScript编程中,理解和操作原型链上的函数参数是常见且重要的任�...

微信小程序webview中Vue.js动态style位移失效是什么原因?微信小程序webview中Vue.js动态style位移失效是什么原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js动态style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何实现对多个链接的并发GET请求并依次判断返回结果?在Tampermonkey中如何实现对多个链接的并发GET请求并依次判断返回结果?Apr 04, 2025 pm 09:15 PM

在Tampermonkey中如何对多个链接进行并发GET请求并依次判断返回结果?在Tampermonkey脚本中,我们经常需要对多个链...

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用