在HTML5的热潮中,许多Web开发者可能会面临一个重要的问题:如何为即将开发的离线应用选择合适的客户端持久化机制。本文将总结所拥有的选项,并介绍两个新的JavaScript库,它们可以帮助实现持久化机制,而无需担心底层的实现细节。
根据HTML5规范,有新的选项可以在Web客户端存储数据,这些新选项增加了一些旧有的选项(如cookies)。以下是面临的新选项:
Local Storage是一个键/值字典,存储在Web浏览器中,即使关闭浏览器或浏览器标签页,数据也会持久化。保存的数据是本地的,不会发送到服务器。它包括两种不同类型的存储——LocalStorage和SessionStorage。如果想了解更多关于这种机制的信息,可以阅读以下文章:
根据W3C规范,“IndexedDB是一个数据库API,用于存储记录,这些记录包含简单值和层次对象。每条记录由一个键和一些值组成。此外,数据库维护对其存储记录的索引。”。将在未来的帖子中介绍这种机制。
可以基于新的HTML5File API等进行自定义实现。
有了这些新选择,将如何选择呢?由于IndexedDB目前仍在规范开发中(意味着它非常不稳定),而LocalStorage是一个稳定的规范,可能会倾向于使用LocalStorage,但可能希望在未来使用IndexedDB。那么,如何解决这个困境呢?
不必解决这个问题。可以使用一个默认使用IndexedDB的包装器,如果浏览器不支持,则回退到LocalStorage或内存实现。有两个很棒且全新的库实现了这样的包装器,建议在准备使用Web客户端存储时检查它们:
datajs是Microsoft数据平台的开源JavaScript库,被描述为“一个新的跨浏览器JavaScript库,它通过利用现代协议如JSON和OData以及HTML5支持的浏览器特性,使得数据为中心的Web应用程序成为可能”。datajs支持LocalStorage、IndexedDB(目前处于实验支持阶段)以及为旧浏览器提供回退的内存存储。想要进一步了解,请访问:
AmplifyJS是.appendto()的开源JavaScript库,被描述为“一套旨在解决常见Web应用程序问题的组件,具有简单的API”。它包括对各种持久化客户端存储系统的包装器,以及amplify.store包装器。想要进一步了解,请访问:
这些库可以使生活更轻松,并消除大部分疑虑。
// 使用datajs
var datajs = require('datajs');
var store = new datajs.Store('myStore', {storage: 'localStorage'});
store.save({key: 'myKey', value: 'myValue'}, function(err, result) {
if (err) {
console.error('保存失败:', err);
} else {
console.log('保存成功:', result);
}
});
// 使用AmplifyJS
var amplify = require('amplify');
amplify.store('myKey', 'myValue');
var value = amplify.store('myKey');
console.log('读取值:', value);