MCollection.js如果谁有时间,可以一起完善一下
发布于 6小时前 作者 i5ting 63 次浏览 来自 分享

MCollection

MCollection is mobile collection: a data access object wrapper for all mobile platform

data storage solution for all mobile platform

发现一个很严重的问题,android不支持websql

一、查看storage在浏览器中的支持情况

http://html5test.com/compare/feature/storage-localStorage/storage-sqlDatabase/storage-indexedDB.basic.html

  • 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

所以我们的解决方案是

  1. 如果有indexdb就用indexdb
  2. 若果有websql就用websql
  3. 什么都没有的时候,使用localstorage存,近于万能

解决方案

需求

  1. 如果有indexdb就用indexdb
  2. 若果有websql就用websql
  3. 什么都没有的时候,使用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

如果谁有时间,可以一起完善一下,我现在忙不过来了

2 回复

今后主打indexdb? 不过现在好多浏览器应该不支持

@chapgaga 是以后的标准,indexed是nosql,够用

回到顶部