Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Firefox对indexedDB的事务限制

  indexedDB的基本操作是基于事务的,多个操作我们可能会在多个事务中完成。那么同一个消息中的事务数量有没有限制呢?通常情况下是不限制的,但Firefox却不同。当同时执行的事务超出一定数量后事务就会被强制终止,所以我们应该避免对事务的滥用。
  下面是重现这个问题的代码 indexedDB.deleteDatabase("test"); //尝试删除已存在的同名数据库
(function(){
  //初始化数据库结构
  this.onupgradeneeded=function(){
    this.result.createObjectStore("myobj",{keyPath:"id"});
  };
  //成功打开数据库
  this.onsuccess=function(){
    var db=this.result;
    //用100个事务分别写入数据
    for(var i=0;i<100;i++)
      db.transaction("myobj","readwrite")
        .objectStore("myobj").put({id:i});
  };
}).call(indexedDB.open("test")); //打开数据库

  也许第一次运行并不会出错,但是刷新页面后就可以看到错误。因为indededDB服务不是页面级的,事务可能不会因为页面的刷新而被释放。由于大量暂时还没释放的事务存在,所以后面再创建事务就没有多余的空间了。
  这个问题没有直接的解决办法,我们只能应该尽可能的避免使用太多事务,比如实现个事务池之类的东西来把零碎的操作合并到同一个事务中。其实本身就不应该开太多事务,即使在其它不会出现这个问题的浏览器上也一样!因为太多的事务只会影响性能。

测试于:
  Firefox 26.0
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^