Javascript IndexedDB存储250kB/s流式数据的性能问题

Javascript IndexedDB存储250kB/s流式数据的性能问题,javascript,indexeddb,Javascript,Indexeddb,我正在为硬件传感器开发一个基于web的接口,该接口可产生约250kB/s的原始数据(125 kS/s,每个样本16位)。web应用程序旨在实时可视化(使用画布)和存储(使用IndexedDB)这些数据。我的indexedDB存储存在性能问题 此应用程序设计为运行数天甚至数周,并应可靠地存储大量数据(数十到数百MB) 因为写提交似乎是一般的性能问题,所以我重写了我的应用程序,每5秒只存储一大块数据作为非稀疏整数数组对象。这种方法很有效,但我仍然获得了非常不稳定的可视化性能,高CPU和高内存使用率。

我正在为硬件传感器开发一个基于web的接口,该接口可产生约250kB/s的原始数据(125 kS/s,每个样本16位)。web应用程序旨在实时可视化(使用画布)和存储(使用IndexedDB)这些数据。我的indexedDB存储存在性能问题

此应用程序设计为运行数天甚至数周,并应可靠地存储大量数据(数十到数百MB)

因为写提交似乎是一般的性能问题,所以我重写了我的应用程序,每5秒只存储一大块数据作为非稀疏整数数组对象。这种方法很有效,但我仍然获得了非常不稳定的可视化性能,高CPU和高内存使用率。确切的存储代码:

//dataDB = indexedDB database opened in another function
//slice = data to be stored
//sessionID = object store index 

//this function is called about once every 5 seconds
//with 700 000 values in the slice array
//slice is a multidimensional array

function storeFastData(slice, sessionID){
    var s = dataDB.transaction(["fastData"],"readwrite").objectStore("fastData");
    var fdreq = s.get(sessionID);
    fdreq.onsuccess = function(e){
        var d = fdreq.result;
        for(i = 0; i < slice.length; i++){
            d.data[i][1] = slice[i][1];
        }
        s.put(d);
    }
}
//dataDB=indexedDB数据库在另一个函数中打开
//slice=要存储的数据
//sessionID=对象存储索引
//此函数大约每5秒调用一次
//切片数组中有700000个值
//slice是一个多维数组
函数storeFastData(切片、会话ID){
var s=dataDB.transaction([“fastData”],“readwrite”).objectStore(“fastData”);
var fdreq=s.get(sessionID);
fdreq.onsuccess=函数(e){
var d=fdreq.result;
对于(i=0;i
具体地说:

  • IndexedDB是否是此应用程序的正确选择
  • 我实施这一点的方式是不是一个白痴?这是我正在做的第一个基于IndexedDB的项目
  • 我已经读到,使用WebWorkers至少可以解决口吃问题,因为它可以在另一个线程上运行。这能解决我的性能问题吗
我愿意使用新的(草稿)功能,但每次打开应用程序时都需要对5MB以上的存储进行用户交互(例如使用配额管理API),这非常麻烦,如果可能的话,我希望避免这种情况


我不使用jquery。这不能作为本机应用程序编写(它必须在浏览器中运行)。

IndexedDB是您的最佳选择。如果您在数据快速且频繁可用时立即进行存储,则应该可以。您不需要等待5秒,请立即以大约200毫秒的间隔存储。通常,indexeddb写操作需要20毫秒