MyException - 我的异常网
当前位置:我的异常网» 数据库 » [转]phonegap, 以及浏览器端db容量限制有关问题

[转]phonegap, 以及浏览器端db容量限制有关问题

www.MyException.Cn  网友分享于:2013-07-16  浏览:37次
[转]phonegap, 以及浏览器端db容量限制问题

 

--关于phonegap
android和ios提供了webview视图,它可以用来展示网页,支持HTML5。
phonegap正是使用webview来完成对html和css的包装的。
phonegap允许网页使用系统级别的功能,如加速器,文件系统等,但这些功能的使用会拖慢运行效率。
phonegap目前并不能真正做到“一次书写,到处运行”,有些API只支持部分平台,有些已经提供的API会因为平台的差异有不同的行为。
phonegap 可以做到无缝升级, 不过需要自己实现升级代码


--关于网页对于数据库容量的限制
native app中展示网页,使用的数据库是属于这个app而不是浏览器的

Android

phonegap在android平台上,有如下表现:

1. native app中展示网页,可以通过window.opendatabase()申请容量超过5MB的数据库
2. 如果因为数据变更导致超出了申请的容量,当前的事务操作会失败,然后android调用钩子方法重新设置容量大小。其中:
     a. 1.x系统容量不变
     b. 2.x系统以上容量增加,上限为100MB

ios:
phonegap在ios平台上不提供对db的额外处理。
native app中展示网页,网页所使用的db,limit为5MB,超出这个限制,操作会默默的失败,并且目前没有可以改变这个限制的方法。
ios中要想使用50MB的数据库,必须通过web app方式,除非自行开发功能,将db操作映射到系统的db上。但是由于ios系统的限制,自行开发工作量大。


ios中webview突破db size的5M限制
当在safari中申请超过5m大小的空间时,会弹出提醒让用户确认,但webview中却只是默默的失败。其实5M大小基本也够用了,但如果应用的多媒体内容很多,这点容量则会显得捉襟见肘。如果非要用webview不可,非要突破这个5M限制不可,就可以像下面这样折腾。
虽然两者使用的是同一个浏览器核心,但是webview在有些细节上和safari会不相同,如果要把webapp直接包装移植成native app,会有点麻烦。

由于目前没有方法通过操作webview对象来放宽db size的限制,所以需要考虑调用ios系统的sqlite数据库:当网页依照websql的api调用db.transaction的时候,调用请求由app而不是浏览器(webview)去处理。
因此在ios上,需要覆盖opendatabase的实现,返回定制过的db对象,这个对象将把所有的sql调用发送到ios后端,并响应执行结果。执行序列要保证一致,事务完整性必须被支持。
js前端
覆盖database
Database = function() {
        this.queryQueue = {};
    }
window.openDatabase = function(){return new Database();}

将sql调用发送到后端,利用phonegap提供的框架支持:
PhoneGap.exec(null, null, "Database", "executeSql", [sql, params, trackId]);
提供一个用于ios后端传递运行结果的钩子:
function executeSqlSuccessIOSCallback(dataObj){...}

这个调用会构造出一个不可见的iframe,iframe对外发出的url请求会被ios后端捕获。


ios后端
相应js调用,利用phonegap提供的框架支持,扩展phonegapCommand
@interface Database : PhoneGapCommand {}
-(void) executeSql:(NSMutableArray *)arguments withDict:(NSMutableDictionary*)options;
@end
注意这里的参数是固定的,方法名对应js调用中的第四个参数,有一种调用就实现一个对应的方法
当executesql产生结果时,调用webview的执行js的接口,把结果放入executeSqlSuccessIOSCallback的参数中,从而使页面知道sql执行完毕并拿到结果


保证执行序列一致
js调用中附加了一个trackId,这个可以根据当前时间来生成,可以用来排序。不过目前来看似乎也没用.
websql api中,sql执行都是在某个事务中进行的,而sqlite作为单文件全局写锁的数据库,同一个时间只能有一个事务在执行,其他事务必须要等待依次执行,因此队列是必须的。

phonegap, 以及浏览器端db容量限制问题

文章评论

10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
老程序员的下场
老程序员的下场
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员必看的十大电影
程序员必看的十大电影
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我的丈夫是个程序员
我的丈夫是个程序员
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
代码女神横空出世
代码女神横空出世
 程序员的样子
程序员的样子
那些争议最大的编程观点
那些争议最大的编程观点
程序员的鄙视链
程序员的鄙视链
鲜为人知的编程真相
鲜为人知的编程真相
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
10个调试和排错的小建议
10个调试和排错的小建议
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
旅行,写作,编程
旅行,写作,编程
我是如何打败拖延症的
我是如何打败拖延症的
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
每天工作4小时的程序员
每天工作4小时的程序员
Java程序员必看电影
Java程序员必看电影
一个程序员的时间管理
一个程序员的时间管理
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员都该阅读的书
程序员都该阅读的书
漫画:程序员的工作
漫画:程序员的工作
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
如何成为一名黑客
如何成为一名黑客
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有