基于 HTML5 的数据存储

以前想做个静态网页APP。最初的思路是用本地文件存储数据,后来发现在手机上运行时,文件无法找到。

经过了长达几个月的搜索(实际也就几天),没有找到合适的方法。

就在绝望的时候,无意间搜到基于HTML5的各种保存数据的方法。在此简单与大家分享一下。

前四种是从http://www.hightopo.com/blog/344.html截取。

Cookie

最古老的存储方式为Cookie,这种存储方式存储内容很有限,只适合做简单信息存储,存取接口设计得极其反人类,为了介绍HTML5存储方案的完整性我顺便把他给列上:

function getCookieValue(name) {
    if (document.cookie.length > 0) {
        var start = document.cookie.indexOf(name + "=");
        if (start !== -1) {
            start = start + name.length + 1;
            var end = document.cookie.indexOf(";", start);
            if (end === -1){
                end = document.cookie.length;
            }
            return unescape(document.cookie.substring(start, end));
        }
    }
    return ‘‘;
}
function save(dataModel) {
    var value = dataModel.serialize();
    document.cookie = ‘DataModel=‘ + escape(value);
    document.cookie = ‘DataCount=‘ + dataModel.size();
    console.log(dataModel.size() + ‘ datas are saved‘);
    return value;
}
function restore(dataModel){
    var value = getCookieValue(‘DataModel‘);
    if(value){
        dataModel.deserialize(value);
        console.log(getCookieValue(‘DataCount‘) + ‘ datas are restored‘);
        return value;
    }
    return ‘‘;
}
function clear() {
    if(getCookieValue(‘DataModel‘)){
        console.log(getCookieValue(‘DataCount‘) + ‘ datas are cleared‘);
        document.cookie = "DataModel=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
        document.cookie = "DataCount=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
    }
}

LocalStorage

最简单的存储方式LocalStorage,李勇Key-Value的简单键值对存储结构,Web Storage除了localStorage的持久性存储外,还有针对本次回话的sessionStorage方式,一般情况下localStorage较为常用,更多可参考 http://www.w3.org/TR/webstorage/

function save(dataModel){
    var value = dataModel.serialize();
    window.localStorage[‘DataModel‘] = value;
    window.localStorage[‘DataCount‘] = dataModel.size();
    console.log(dataModel.size() + ‘ datas are saved‘);
    return value;
}
function restore(dataModel){
    var value = window.localStorage[‘DataModel‘];
    if(value){
        dataModel.deserialize(value);
        console.log(window.localStorage[‘DataCount‘] + ‘ datas are restored‘);
        return value;
    }
    return ‘‘;
}
function clear(){
    if(window.localStorage[‘DataModel‘]){
        console.log(window.localStorage[‘DataCount‘] + ‘ datas are cleared‘);
        delete window.localStorage[‘DataModel‘];
        delete window.localStorage[‘DataCount‘];
    }
}

Indexed Database

Indexed Database,也可简称为 IndexedDB(以前被称作 WebSimpleDB),同样是一个 Web 客户端存储结构化数据的规范,在 2009 年由 Oracle 提出。

如果说 Web SQL Databae 在客户端实现了 传统的 SQL 数据库操作,那么 Indexed Database 更类似于 NoSQL 的形式来操作数据库 , 其中最重要的是 Indexed Database 不使用 SQL 作为查询语言。

其数据存储可以不需要固定的表格模式,也经常会避免使用 SQL 的 JOIN 操作,并且一般具有水平可扩展性。

目前 W3C 官方也把焦点 投到对 Indexed Database 规范的制定当中来,而 Microsoft 和 Mozilla 是对这个规范重要的两个推动者,Firefox 4 以上已经部分实现了 Indexed DB API,并且 IE 10 中也将实现 Indexed DB API。由于在手机等移动设备的浏览器中都没有实现 Indexed DB API,所以其还有一定的局限性,但这并不妨碍它作为未来的 HTML5 的焦点而存在。

request = indexedDB.open("DataModel");
request.onupgradeneeded = function() {
    db = request.result;
    var store = db.createObjectStore("meters", {keyPath: "id"});
    store.createIndex("by_tag", "tag", {unique: true});
    store.createIndex("by_name", "name");
};
request.onsuccess = function() {
    db = request.result;
};
function save(dataModel){
    var tx = db.transaction("meters", "readwrite");
    var store = tx.objectStore("meters");
    dataModel.each(function(data){
        store.put({
            id: data.getId(),
            tag: data.getTag(),
            name: data.getName(),
            meterValue: data.a(‘meter.value‘),
            meterAngle: data.a(‘meter.angle‘),
            p3: data.p3(),
            r3: data.r3(),
            s3: data.s3()
        });
    });
    tx.oncomplete = function() {
        console.log(dataModel.size() + ‘ datas are saved‘);
    };
    return dataModel.serialize();
}
function restore(dataModel){
    var tx = db.transaction("meters", "readonly");
    var store = tx.objectStore("meters");
    var req = store.openCursor();
    var nodes = [];
    req.onsuccess = function() {
        var res = req.result;
        if(res){
            var value = res.value;
            var node = createNode();
            node.setId(value.id);
            node.setTag(value.tag);
            node.setName(value.name);
            node.a({
                ‘meter.value‘: value.meterValue,
                ‘meter.angle‘: value.meterAngle
            });
            node.p3(value.p3);
            node.r3(value.r3);
            node.s3(value.s3);
            nodes.push(node);
            res.continue();
        }else{
            if(nodes.length){
                dataModel.clear();
                nodes.forEach(function(node){
                    dataModel.add(node);
                });
                console.log(dataModel.size() + ‘ datas are restored‘);
            }
        }
    };
    return ‘‘;
}
function clear(){
    var tx = db.transaction("meters", "readwrite");
    var store = tx.objectStore("meters");
    var req = store.openCursor();
    var count = 0;
    req.onsuccess = function(event) {
        var res = event.target.result;
        if(res){
            store.delete(res.value.id);
            res.continue();
            count++;
        }else{
            console.log(count + ‘ datas are cleared‘);
        }
    };
}

浏览器支持

支持:IE(10.0)FireFox(4.0~12.0)Chrome(10.0~18.0)

不支持:IE(6.0~9.0)Safari(3.1~6.0)Opera(10.5~12.0)iOS Safari(3.2~5.0)Android Browser(2.1~4.0)

FileSystem API

相当于操作本地文件的存储方式,目前支持浏览器不多,其接口标准也在发展制定变化中,例如在这个代码时大部分文献使用的webkitStorageInfo已被navigator.webkitPersistentStorage和navigator.webkitTemporaryStorage替代,

存储的文件可通过filesystem:http://www.hightopo.com/persistent/meters.txt’的URL方式在chrome浏览器中查找到,

甚至可通过filesystem:http://www.hightopo.com/persistent/类似目录的访问,因此也可以动态生成图片到本地文件,

然后通过filesystem:http:***的URL方式直接赋值给img的html元素的src访问,因此本地存储打开了一扇新的门,相信以后会冒出更多稀奇古怪的奇葩应用。

navigator.webkitPersistentStorage.queryUsageAndQuota(function (usage, quota) {
        console.log(‘PERSISTENT: ‘ + usage + ‘/‘ + quota + ‘ - ‘ + usage / quota + ‘%‘);
    }
);
navigator.webkitPersistentStorage.requestQuota(2 * 1024 * 1024,
    function (grantedBytes) {
        window.webkitRequestFileSystem(window.PERSISTENT, grantedBytes,
            function (fs) {
                window.fs = fs;
            });
    }
);
function save(dataModel) {
    var value = dataModel.serialize();
    fs.root.getFile(‘meters.txt‘, {create: true}, function (fileEntry) {
        console.log(fileEntry.toURL());
        fileEntry.createWriter(function (fileWriter) {
            fileWriter.onwriteend = function () {
                console.log(dataModel.size() + ‘ datas are saved‘);
            };
            var blob = new Blob([value], {type: ‘text/plain‘});
            fileWriter.write(blob);
        });
    });
    return value;
}
function restore(dataModel) {
    fs.root.getFile(‘meters.txt‘, {}, function (fileEntry) {
        fileEntry.file(function (file) {
            var reader = new FileReader();
            reader.onloadend = function (e) {
                dataModel.clear();
                dataModel.deserialize(reader.result);
                console.log(dataModel.size() + ‘ datas are restored‘);
            };
            reader.readAsText(file);
        });
    });
    return ‘‘;
}
function clear() {
    fs.root.getFile(‘meters.txt‘, {create: false}, function(fileEntry) {
        fileEntry.remove(function() {
            console.log(fileEntry.toURL() + ‘ is removed‘);
        });
    });
}

Web SQL Database

HTML5 的 Web SQL Database 用本地和会话存储实现简单的对象持久化。

对于 HTML5,也许最有用的就是它新推出的“Web Storage” API。对于简单的键值对(比如应用程序设置)或简单对象(如应用程序状态)进行存储,使用本地和会话存储能够很好地完成,但是对繁琐的关系数据进行处理的时候,它就力所不及了,而这正是 HTML5 的“Web SQL Database” API 借口的应用所在。

但W3C 官方在 2011 年 11 月声明已经不再维护 Web SQL Database 规范。

如果说 Web SQL Databae 在客户端实现了 传统的 SQL 数据库操作,那么 Indexed Database 更类似于 NoSQL 的形式来操作数据库 , 其中最重要的是 Indexed Database 不使用 SQL 作为查询语言。

目前 W3C 官方也把焦点 投到对 Indexed Database 规范的制定当中来,而 Microsoft 和 Mozilla 是对这个规范重要的两个推动者,Firefox 4 以上已经部分实现了 Indexed DB API,并且 IE 10 中也将实现 Indexed DB API。由于在手机等移动设备的浏览器中都没有实现 Indexed DB API,所以其还有一定的局限性,但这并 不妨碍它作为未来的 HTML5 的焦点而存在。

详细信息在其它文中说明。

浏览器支持

支持:FireFox(4.0~12.0)Chrome(10.0~18.0)Safari(3.1~6.0)Opera(10.5~12.0)iOS Safari(3.2~5.0)Android Browser(2.1~4.0)

不支持:IE(6.0~10.0)

时间: 2024-12-25 07:15:50

基于 HTML5 的数据存储的相关文章

基于HTML5的数据可视化实现方法解读

现在在大数据的带领下,数据可视化越来越突出,能够清楚的分析出自己想要的数据,这也是我们现在最求的数据可视化方法,那么实现HTML5的数据可视化方法有哪些?这都是我们值得研究的东西,数据可以给我们带来敏感的市场未来发展,同时也能够实时分别不同数据效果. HTML5为数据可视化提供了新的实现方法.本文对HTML5在健康数据可视化在PC及部分移动终端上的应用进行研究.使用HTML5中的Canvas和SVG实现的数据可视化方法基于浏览器的支持,具有很好的平台兼容性 可视化(Visualization)是

[HTML5] 数据存储

HTML5 使用 JavaScript 来存储和访问数据 数据存储: 浏览器支持:主流全部支持(“IE 8.0”.“Chrome 4.0”.“Firefox 4.0”.“Safari 4.0”.“Android 3.0”.“iOS 5.0”): 最高大小:5M: 形式: LocalStorage:本地存储,存储的数据没有时间限制: <script type="text/javascript"> localStorage.lastname="Smith";

cocos2d-html5开发之本地数据存储

做游戏时经常需要的一个功能呢就是数据的保存了,比如游戏最高分.得到的金币数.物品的数量等等,cocos2d-html5使用了html5,所以html5的数据保存方法是对引擎可用的: html5本地数据存储是使用js对数据进行操作,html5 对数据的存储提供了两个方法: sessionStorage - 只对本次会话保留数据 localStorage - 长时间保留数据 关于这个sessionStorage只在浏览器打开进行会话时可用,在游戏中没有测试,用法是和localStorage方法相同的

万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系

转自:http://www.infoq.com/cn/articles/trillion-log-and-data-storage-query-techniques?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage 目前大数据存储查询方案大概可以分为:Hbase系.Dremel系.预聚合系.Lucene系,笔者就自身的使用经验说说这几个系

HTML5数据存储

介绍两种对象使用方法: sessionStorage方法如果关闭了浏览器,这个保存的数据就丢失. 1.sessionStorage 保存数据:sessionStorage.setItem(key,value); 读取数据:sessionStorage.getItem(key); localStorage则是浏览器被关闭,下次在打开浏览器浏览这个页面点击读取数据时任然能读取到保存的数据. 注*这个数据是区分浏览器的,在别的浏览器中是读取不到这个浏览器保存的数据的. 2.localStorage 保

html5 之本地数据存储

HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 cookie与webStorage的对比: cookie的缺陷是非常明显的 1. 数据大小:作为存储容器,cookie的大小限制在4KB左右这是非常坑爹的,尤其对于现在复杂的业务逻辑需求,4KB的容量除了存储一些配置字段还简单单值信息,对于绝大部分开发者来说真的不知指望什么了. 2. 安全性问题:由于在HTTP请求中的co

基于HTML5 Bootstrap搭建的后台模板,分页,模糊查询已经全部JS实现,无需编码,嵌入数据即可开发,内置8款皮肤,欧美风格,非常好用!

原文:基于HTML5 Bootstrap搭建的后台模板,分页,模糊查询已经全部JS实现,无需编码,嵌入数据即可开发,内置8款皮肤,欧美风格,非常好用! 源代码下载地址:http://www.zuidaima.com/share/1550463575788544.htm 分页,查询功能已经全部用JS实现,无需再做此类代码编写,嵌入数据即可,真心美观好用.       

Html5——WEB(客户端)数据存储

在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前,这些都是由 cookie 完成的.但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高. 在 HTML5 中,数据不是由每个服务器请求传递的,而是只有在请求时使用数据.它使在不影响网站性能的情况下存储大量数据成为可能. 对于不同的

基于Html5 Plus + Vue + Mui 移动App开发(三)-文件操作(读取、保存、更新数据)

实全资讯采用基于Html5 Plus + Vue + Mui 移动App.主要实现功能包括: 实现搜索站点设置 实现搜索关键字定义 实现搜索资讯保存.删除功能. 主界面实现关键字搜索.预定义关键字搜索,下拉刷新,支持搜索结果保存.分享. 我的界面主要是展示自己保存的搜索资讯,支持删除.分享. 设置界面主要实现搜索站点.初始搜索关键字定义. 搜索站点目前支持:凤凰资讯.参考信息.腾讯资讯.百度资讯: 读取数据 /*读取内容*/ shiquan.readNews = function(callbac