localForage帮你实现Web离线存储

Web 应用程序有离线功能,如保存大量数据集和二进制文件。你甚至可以做缓存 MP3 文件这样的事情。浏览器技术可以保存离线数据和大量的储存。但问题是,如何选择合适技术,如何方便灵活的实现。

如果你需要开发一个支持离线存储的 Web 应用程序,不知道从哪里开始,那么这篇文章正是你需要的。

localStorage 能够让你实现基本的数据存储,但它的速度慢,而且不能处理二进制数据。IndexedDB 和 WebSQL 是异步的,速度快,支持大数据集,但他们的API 使用起来有点复杂。不仅如此,IndexedDB 和 WebSQL 没有被所有的主流的浏览器厂商支持,这种情况最近也不太可能改变。

Mozilla 开发了一个叫 localForage 的库 ,使得离线数据存储在任何浏览器都是一项容易的任务。

localForage 是一个使用非常简单的 JavaScript 库的,提供了 get,set,remove,clear 和 length 等等 API,还具有以下特点:

支持回调的异步 API;

支持 IndexedDB,WebSQL 和 localStorage 三种存储模式(自动为你加载最佳的驱动程序);

支持 BLOB 和任意类型的数据,让您可以存储图片,文件等等。

支持 ES6 Promises;

对 IndexedDB 和 WebSQL 的支持使您可以为您的 Web 应用程序存储更多的数据,要比 localStorage 允许存储的多很多。其 API 的无阻塞性质使得您的应用程序更快,不会因为 Get/Set 调用而挂起主线程。

localStorage

传统的  API 在许多方面其实是很不错的,使用简单,没有复杂的数据结构。如果你在你的应用程序有一个配置信息需要保持,可以这样写:

// 需要离线保存的配置数据
var config = {
    fullName: document.getElementById('name').getAttribute('value'),
    userId: document.getElementById('id').getAttribute('value')
};

// 保存起来,供下次使用
localStorage.setItem('config', JSON.stringify(config));

// 从离线存储中读取出来
var config = JSON.parse(localStorage.getItem('config'));

请注意,使用 localStorage 存储的数据需要保存为字符串,所以我们在保存和读取时需要进行 JSON 序列化和反序列化。

看起来好像使用很简单,但你很快会发现 localStorage 的几个问题:

它是同步的。不管数据多大,我们需要等待数据从磁盘读取和解析,这会减慢我们的应用程序的响应速度。这在移动设备上是特别糟糕的,主线程被挂起,直到数据被取出,会使你的应用程序看起来慢,甚至没有反应。

它仅支持字符串。需要使用 JSON.parse 与 JSON.stringify 进行序列号和反序列化。这是因为 localStorage 中仅支持 JavaScript 字符串值。不支持数值,布尔值,Blob 类型的数据。

localForage

localForage 可以解决上面的问题,下面我们对比一下 IndexedDB 和 localForage 存储相同数据的差异:

IndexedDB 代码:

// IndexedDB.
var db;
var dbName = "dataspace";
var users = [ {id: 1, fullName: 'Matt'}, {id: 2, fullName: 'Bob'} ];
var request = indexedDB.open(dbName, 2);
request.onerror = function(event) {
    // 错误处理
};
request.onupgradeneeded = function(event) {
    db = event.target.result;
    var objectStore = db.createObjectStore("users", { keyPath: "id" });
    objectStore.createIndex("fullName", "fullName", { unique: false });
    objectStore.transaction.oncomplete = function(event) {
        var userObjectStore = db.transaction("users", "readwrite").objectStore("users");
    }
};

var transaction = db.transaction(["users"], "readwrite");
// 所有数据都添加到数据后调用
transaction.oncomplete = function(event) {
    console.log("All done!");
};
transaction.onerror = function(event) {
    // 错误处理
};

var objectStore = transaction.objectStore("users");
for (var i in users) {
    var request = objectStore.add(users[i]);
    request.onsuccess = function(event) {
        // 里面包含我们需要的用户信息
        console.log(event.target.result);
    };
}

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索存储
, 数据
, 应用程序
, localstorage
, transaction
, 离线存储
, indexeddb
, 支持
, 系统mysqljava websql server
加载es6
localforage、ionic2 localforage、localforage 使用、localforage.js、localforage 中文,以便于您获取更多的相关知识。

时间: 2024-11-02 18:52:48

localForage帮你实现Web离线存储的相关文章

Html5 Web的5中离线存储方式之localStorage

Html5 Web的5中离线存储方式之localStorage 在HTML5越来越流行的今天,如果你还不知道离线存储,那就说明你落后了很多. HTML5的离线存储方式有多种:Web SQL Database.LocalStorage.Cookie.WebStorage.IndexedDB.FileSystem. Web SQL Database目前虽然还有浏览器支持,是唯一的关系数据库结构的存储,但W3C以及停止对其的维护和发展.我就不多说了. 今天我们主要看LocalStorage这种最简单的

html5离线存储中用js检测用户是否联网

在hmtl5移动应用中,离线浏览技术越来越流行.但是,新技术的出现有时会给我们WEB开发人员带领额外的苦恼,比如,如何判断用户现在是在线还是离线?幸好,有矛就有盾,JavaScript里的navigator对象帮我们解决这个问题. navigator.onLine navigator.onLine属性能给我们提供一个布尔值,用来判断用户是否连接了互联网.你可以这样访问它: if(navigator.onLine) { // true|false    // ...} 没有比这更简单的了! 事件

让 JavaScript 拯救 HTML5 的离线存储

在 Internet 连接无处不在的今天,我们忽然有了另外一个需求,离线 Web.Gmail, Google Reader, Zoho 这些优秀的 Web 应用都支持离线使用,这归功于 Google Gears.然而真正的离线 Web 要靠 HTML 5,这个未来的 Web 语言明星将为  Web 的离线存储制定一套标准,W3C已经发布 HTML5 离线存储细则.   有人可能会说,离线 Web 毫无意义,你得到的只是一个蹩脚的桌面程序,在 wi-fi, 3G 无处不在的今天,我们大部分时间都是

HTML5离线存储 初探

本文主要内容归纳如下: 一.离线存储的作用:二.如何实现离线存储:三.applicationCache对象,及属性.事件.接口 四.访问缓存应用,相应触发事件,及其对应状态:五.如何更新离线缓存 六.demo演示:update后是否调用swapCache的区别:七.写在后面   一.离线存储的作用 1.用户可离线访问你的应用,这对于无法随时保持联网状态的移动终端用户来说尤其重要 2.用户访问本地的缓存文件,通常意味着更快的访问速度 3.仅仅加载被修改过的资源,避免同一资源对服务器多次的请求,大大

iComet聊天Demo增加好友列表和离线存储

最新版的 icomet 长连接/push 服务器的聊天 Demo 升级了, 做了如下更新: 美化界面, 更好看了. 增加好友列表, 能显示全部好友和最近联系人. 离线存储消息. 界面截图: Web界面 Android界面 文章转载自 开源中国社区[http://www.oschina.net]

HTML5离线存储归纳及使用实例

HTML5离线存储归纳 一.离线存储的作用 1.用户可离线访问你的应用,这对于无法随时保持联网状态的移动终端用户来说尤其重要 2.用户访问本地的缓存文件,通常意味着更快的访问速度 3.仅仅加载被修改过的资源,避免同一资源对服务器多次的请求,大大降低了对服务器的访问压力 二.如何实现离线存储 1.在html标签里通过manifest属性引用一个cache.manifest文件,该文件里声明了浏览器需缓存的所有资源文件,如下所示: <!DOCTYPE html><html manifest=

表单-求大神帮我看看web中的这个问题

问题描述 求大神帮我看看web中的这个问题 在表单提交了,就会弹出这样一些东西,说是空指针异常,但具体是哪里我并不知道,烦请大神们帮我看看. HTTP Status 500 - java.lang.NullPointerException type Exception report message java.lang.NullPointerException description The server encountered an internal error that prevented i

cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中(转)

基本概念:cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中. 以博客园为例,我们看看cookie有哪些属性: 1.Name:cookie的名称: 2.Value:cookie名称对应的值: 3.Domain:设置cookie作用域.默认是当前web服务器的主机名.设置该属性可使大型网站子域之间共享cookie,不过只能设置为当前服务器的域. 举个栗子:order.example.com域下的服务器想读取catalog/example.com域下设置

手把手教你阻止Web应用存储敏感数据

Michael Cobb是认证信息系统安全架构专家(CISSP-ISSAP),知名的安全作家,具有十 多年丰富的IT行业经验,并且还从事过十六年的金融行业.他是Cobweb Applications公司的创始人兼常务董事,该公司主要提供IT培训,以及数据安全和分析的支持.Michael还合著过IIS Security一书,并为领先的IT出版物撰写过无数科技文章.此外,Michael还是微软认证数据库系统管理员和微软认证专家.498)this.width=498;' onmousewheel =