MCollection
MCollection is mobile collection: a data access object wrapper for all mobile platform
data storage solution for all mobile platform
发现一个很严重的问题,android不支持websql
一、查看storage在浏览器中的支持情况
- localstorage(key-value存储)
- websql(sqlite)
- indexdb(NoSQL)
二、分析上面的结果
android平台
- Android 1.6 » 都不支持
- Android 2.x » 不支持indexdb,其他都支持
- Android 3.2 » 不支持indexdb,其他都支持
- Android 4.0 » 支持localstorage,但不支持其他2种
- Android 4.0+ » 都支持
iOS平台
- iOS 2.2 » 支持websql,其他都不支持
- iOS 3.1 – iOS 7.0 » 不支持indexdb,其他都支持
- iOS 8.0 »
Windows Phone 平台
- Windows Phone 7 » 都不支持
- Windows Phone 7.5 » 只是支持localstorage
- Windows Phone 8 » 只是不支持websql
- Windows Phone 8.1 »只是不支持websql
总结
- 绝大部分都支持localstorage,不支持localstorage的如
- ios2.2,可以选websql,
- Android 4.0 » 只能用localstorage
- Windows Phone 7,没有任何选择
- 支持第二好的是websql
- 支持最差的是indexdb
所以我们的解决方案是
- 如果有indexdb就用indexdb
- 若果有websql就用websql
- 什么都没有的时候,使用localstorage存,近于万能
解决方案
需求
- 如果有indexdb就用indexdb
- 若果有websql就用websql
- 什么都没有的时候,使用localstorage存,近于万能
抽象
这其实和orm很类似,比如hibernate或者其他实现,实际上都是通过对object的操作, 完成对各种db的操作。
- 第一步,定出dao层的接口,我称之为Collection
- 第二步,写Collection的localstorage实现
- 第三步,写Collection的websql实现(至此,大部分情况都可用了)
- 第四步,写Collection的indexdb实现
示例
<script src="./js/storage_test.js"></script>
<script>
//清楚所有缓存
LocalStore.clear();
var collection = new Collection('message_test');
collection.use_websql();
var obj = {
type :'type',
mid :'mid',
uid :'uid',
uname :'uname',
avatar :'avatar',
sid :'sid',
sname:'sname',
timestamp :'timestamp',
msg :'msg'
}
// ok
collection.add(obj);
// ok
collection.save();
var arr = collection.all();
console.log(arr);
var m = collection.get(0);
console.log(m.type);
// collection.drop();
// var saved_obj = collection.save(obj);
// var myobj = collection.get(saved_obj.id);
// var arr = collection.all();
</script>
see https://github.com/i5ting/Collection.js
如果谁有时间,可以一起完善一下,我现在忙不过来了