摘要

在移动端H5页面开发的时候,为了更好的提高用户体验,可以对不常变化的数据做浏览器端数据缓存,在用户打开页面的时候,首先加载本地的数据,然后异步请求服务端,更新数据。在移动端webview中,可以使用IndexedDB的方式对数据进行存储。当然如果数据量不大的情况下,localstorage也是一种选择。

什么是IndexedDB

一般来说,数据库分两种类型:关系型和文档型(也称NoSQL或者对象)。关系型数据库如SQL Server,MySQL,Oracle的数据存储在表中。文档数据库如Mongodb,Redis,CouchDB将数据集作为个体对象存储。IndexedDB是一个文档数据库,它在完全内置于浏览器中的一个沙盒环境中(强制依照(浏览器)同源策略)。如下图所示,展示了数据库的结构:

关于Indexeddb的增删该查,可以使用这篇文字封装的插件进行使用。

http://www.codemag.com/Article/1411041

index.db.js

//index.db.js
; window.indexedDB = window.indexedDB ||
window.mozIndexedDB ||
window.webkitIndexedDB ||
window.msIndexedDB; window.IDBTransaction = window.IDBTransaction ||
window.webkitIDBTransaction ||
window.msIDBTransaction; window.IDBKeyRange = window.IDBKeyRange ||
window.webkitIDBKeyRange ||
window.msIDBKeyRange; (function (window) { 'use strict'; var db = { version: 1, // important: only use whole numbers! objectStoreName: 'tasks', instance: {}, upgrade: function (e) { var
_db = e.target.result,
names = _db.objectStoreNames,
name = db.objectStoreName; if (!names.contains(name)) { _db.createObjectStore(
name,
{
keyPath: 'id',
autoIncrement: true
});
}
}, errorHandler: function (error) {
window.alert('error: ' + error.target.code);
debugger;
}, open: function (callback) { var request = window.indexedDB.open(
db.objectStoreName, db.version); request.onerror = db.errorHandler; request.onupgradeneeded = db.upgrade; request.onsuccess = function (e) { db.instance = request.result; db.instance.onerror =
db.errorHandler; callback();
};
}, getObjectStore: function (mode) { var txn, store; mode = mode || 'readonly'; txn = db.instance.transaction(
[db.objectStoreName], mode); store = txn.objectStore(
db.objectStoreName); return store;
}, save: function (data, callback) { db.open(function () { var store, request,
mode = 'readwrite'; store = db.getObjectStore(mode), request = data.id ?
store.put(data) :
store.add(data); request.onsuccess = callback;
});
}, getAll: function (callback) { db.open(function () { var
store = db.getObjectStore(),
cursor = store.openCursor(),
data = []; cursor.onsuccess = function (e) { var result = e.target.result; if (result &&
result !== null) { data.push(result.value);
result.continue(); } else { callback(data);
}
}; });
}, get: function (id, callback) { id = parseInt(id); db.open(function () { var
store = db.getObjectStore(),
request = store.get(id); request.onsuccess = function (e) {
callback(e.target.result);
};
});
}, 'delete': function (id, callback) { id = parseInt(id); db.open(function () { var
mode = 'readwrite',
store, request; store = db.getObjectStore(mode); request = store.delete(id); request.onsuccess = callback;
});
}, deleteAll: function (callback) { db.open(function () { var mode, store, request; mode = 'readwrite';
store = db.getObjectStore(mode);
request = store.clear(); request.onsuccess = callback;
}); }
}; window.app = window.app || {};
window.app.db = db; }(window));

index.db.js使用

设置数据库名称

        //indexed db name
app.db.objectStoreName = "mytestdb";

添加数据

        //add data
app.db.save({ id: 2, name: "wolfy" }, function () {
//回调函数
console.log("添加成功");
});

查询数据

根据id查询

        //查询
app.db.get(1, function (item) {
console.log(item);
});

查询所有

        //query all
app.db.getAll(function (items) {
console.log(items);
});

结果

删除数据

删除id为2的数据

        //delete
app.db.delete(2, function () {
console.log('删除成功');
})

删除所有

        app.db.deleteAll(function () {
console.log("删除成功");
})

修改

        //add data
app.db.save({ id: 2, name: "wolfy2" }, function () {
//回调函数
console.log("添加成功");
});

总结

在优化移动端h5页面的时候,对不经常变化的数据进行本地存储,在访问页面的时候先加载本地的然后异步更新本地数据。

参考资料

http://web.jobbole.com/81793/

http://www.codemag.com/Article/1411041

浏览器数据库IndexedDB介绍的更多相关文章

  1. 浏览器数据库 IndexedDB 入门

    一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...

  2. 浏览器数据库 IndexedDB 入门教程

    一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...

  3. 客户端持久化数据库---indexedDB使用

    _ 阅读目录 一:什么是indexedDB数据库? 二:IndexedDB数据库操作 2.1 打开或创建数据库 2.2 创建对象仓库(或叫创建表) 2.3 创建索引 2.4 新增数据 2.5 读取数据 ...

  4. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  5. Postgres数据库基本介绍

    最近一直在做一个和PostgreSQL数据库相关的项目,把自己在这个过程中学习的知识记录下来.关于PostgreSQL数据库网上已经有太多的相关介绍了,为了博文的系统性还是先看一下维基百科对Postg ...

  6. [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  7. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  8. iOS-SQLite数据库使用介绍

    iOS-SQLite数据库使用介绍 SQLite是MySQL的简化版,更多的运用与移动设备或小型设备上.SQLite的优点是具有可移植性,它不需要服务器就能运行,同时,它也存在一些缺陷,首先,没有提供 ...

  9. MySql数据库基本介绍和基本语法

    一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...

随机推荐

  1. 洛谷P1286 两数之和

    这个题.. 刚开始没看见输入若干行,所以有的点就.. 令 m = n * (n - 1) / 2 已知 s = {s (1), s(2), ..., s(m)}, s(i) <= s(i+1) ...

  2. 【[国家集训队]小Z的袜子】

    对于L,R的询问.设其中颜色为x,y,z的袜子的个数为a,b,c...那么答案即为(a*(a-1)/2+b*(b-1)/2+c*(c-1)/2....)/((R-L+1)*(R-L)/2)化简得:(a ...

  3. ROS + Caffe 机器人操作系统框架和深度学习框架笔记 (機器人控制與人工智能)

    ROS + Caffe,这里以环境中物体识别为示例,机器人怎么知道环境里面有什么呢? [0.0567392 - n03376595 folding chair][0.0566773 - n040999 ...

  4. Java模拟按键

    JDK自带了Robot类,此类用于为测试自动化.自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件.Robot 的主要目的是便于 Java 平台实现自动测试. 详情可查看jdk1.6 ...

  5. INNODB表快速迁移

    本实验在一台server上启动了2个mysql实例端口分别是3307   3308,目的是将3307的表aaa迁移到3308中去,并打开3308的slave 1.在3308上 mysql> dr ...

  6. bzoj 2819

    2819 思路: 手工栈: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 500005 #define ma ...

  7. Decorator 装饰

    意图 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 结构 Component:定义一个对象接口,可以给这些对象动态地添加职责:(纯虚函数) Conc ...

  8. 【LOJ】#2205. 「HNOI2014」画框

    题解 我原来根本不会KM 更新每个节点增加的最小值的时候,要忽略那个方访问过的右节点!!! 然后就和最小乘积生成树一样了 代码 #include <iostream> #include & ...

  9. oracle中vsize和length

    其实LENGTH与VSIZE这两个函数联系不大,区别很大.虽然都是“取长度”,但是LENGTH函数结果是“有多少个字符”,VSIZE结果是“需要多少bytes”.简单看一下这两个函数. 1.创建表T并 ...

  10. DML语句、创建和管理表

    insert语句基本语法: insert into table(column) values(values); insert into dept (deptno,dname,loc) values(5 ...