浏览器数据库IndexedDB介绍
摘要
在移动端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://www.codemag.com/Article/1411041
浏览器数据库IndexedDB介绍的更多相关文章
- 浏览器数据库 IndexedDB 入门
一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...
- 浏览器数据库 IndexedDB 入门教程
一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...
- 客户端持久化数据库---indexedDB使用
_ 阅读目录 一:什么是indexedDB数据库? 二:IndexedDB数据库操作 2.1 打开或创建数据库 2.2 创建对象仓库(或叫创建表) 2.3 创建索引 2.4 新增数据 2.5 读取数据 ...
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...
- Postgres数据库基本介绍
最近一直在做一个和PostgreSQL数据库相关的项目,把自己在这个过程中学习的知识记录下来.关于PostgreSQL数据库网上已经有太多的相关介绍了,为了博文的系统性还是先看一下维基百科对Postg ...
- [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...
- Android SQLite 数据库详细介绍
Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...
- iOS-SQLite数据库使用介绍
iOS-SQLite数据库使用介绍 SQLite是MySQL的简化版,更多的运用与移动设备或小型设备上.SQLite的优点是具有可移植性,它不需要服务器就能运行,同时,它也存在一些缺陷,首先,没有提供 ...
- MySql数据库基本介绍和基本语法
一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...
随机推荐
- mysql千万级表关联优化(2)
概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的功能,这算是离职人员挖下的坑,随着数据越来越多,原本的SQL查询变得越来越慢,用户体验特别差,因此SQL优化任务交到了我手上. 这个 ...
- shell在linux里摇摇晃晃
1.shell不只是一种解释器,还是一种编程工具 查看系统中可用的shell,linux默认使用 Bash Shell [root@localhost ~]# cat /etc/shells /bin ...
- Ionic Js十六:滚动条
ion-scroll ion-scroll 用于创建一个可滚动的容器. <ion-scroll [delegate-handle=""] [direction="& ...
- 数据挖掘算法:关联分析二(FP-tree算法)
三.FP-tree算法 下面介绍一种使用了与Apriori完全不同的方法来发现频繁项集的算法FP-tree.FP-tree算法在过程中没有像Apriori一样产生候选集,而是采用了更为紧凑的数据结构组 ...
- Java8Lambda表达式
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个 ...
- 使用命令行管理virtualBox
最近在鼓捣hadoop,装了几台虚拟机,,总感觉gui启动很别扭,后来发现virtualBox有个headless模式,只想说舒服! 常用命令 VBoxManage startvm name|id - ...
- 【转】让你10分钟搞定Mac--最简单快速的虚拟安装
文章出处:让你10分钟搞定Mac--最简单快速的虚拟安装http://bbs.itheima.com/thread-106643-1-1.html (出处: 黑马程序员训练营论坛) 首先说明一下. 第 ...
- ssm框架常见问题
搭建SSM框架时,总是遇到这样那样的问题,有的一眼就能看出来,有的需要经验的积累.现将自己搭建SSM框架时遇到的典型问题总结如下: 一.Struts2框架下的action中无法使用@Autowired ...
- CodeDom生成类文件
仅供个人学习 需要先引入System.CodeDom nuget包 using CodeGenerate.Entities; using System; using System.CodeDom; u ...
- python opencv3 向图像里写字
git:https://github.com/linyi0604/Computer-Vision # coding:utf-8 import cv2 img = cv2.imread(".. ...