摘要

在移动端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. (一)问候 HtmlUnit

    第一节: HtmlUnit 简介 htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实 ...

  2. xss攻击原理与解决方法

    概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系 ...

  3. Nt函数原型头文件

    //转自看雪,可以作为一个头文件使用,方便快捷 1 NTSTATUS NTAPI NtAcceptConnectPort( OUT PHANDLE PortHandle, IN PVOID PortI ...

  4. 20165333 实验二 Java面向对象程序设计

    姓名:陈国超 学号:20165333 班级:1653 实验课程:JAVA程序设计 实验名称:Java面向对象程序设计 实验时间:2018.4.14 指导老师:娄家鹏 实验内容及步骤 (一) " ...

  5. hdu 1760 DFS+博弈

    0代表可放 1带表不能放 每次放一个2*2的方块 不能放者败如果先手必胜则输出Yes 必胜态:从当前状态所能到达的状态中存在一个必败态必败态:从当前状态所能达到的状态全部是必胜态 Sample Inp ...

  6. Spark(十五)SparkCore的源码解读

    一.启动脚本分析 独立部署模式下,主要由master和slaves组成,master可以利用zk实现高可用性,其driver,work,app等信息可以持久化到zk上:slaves由一台至多台主机构成 ...

  7. linux 101 hacks 5PS1

    PS1——默认提示符 看完这一章,我心里若干个卧槽.. 如下所示, 可以通过修改 Linux 下的默认提示符,使其更加实用.在下面的例子中,默认的 PS1的值是“ \s-\v\$”,显示出了 shel ...

  8. Android开发——子线程操作UI的几种方法(待续)

    方法2  Handler andler mHandler = new Handler() { @Override public void handleMessage(Message msg) { su ...

  9. CentOS7的一些指令

    hostnamectl --static set-hostname yuanxu#永久修改主机名 systemctl stop firewalld.service #停止firewall system ...

  10. WebLogic和Tomcat的区别

    J2ee开发主要是浏览器和服务器进行交互的一种结构.逻辑都是在后台进行处理,然后再把结果传输回给浏览器.可以看出服务器在这种架构是非常重要的. 这几天接触到两种Java的web服务器,做项目用的Tom ...