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

Performance issues with IndexedDB storing 250kB/s streaming data

本文关键字:性能 问题 数据 存储 250kB IndexedDB      更新时间:2023-09-26

我正在为一个硬件传感器开发一个基于web的接口,该接口产生大约。250kB/s的原始数据(125 kb/s,每个样本16位)。web应用程序被设计成可视化(使用Canvas)和实时存储(使用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);
    }
}
具体

:

    IndexedDB是这个应用程序的正确选择吗?
  • 我实现这个的方式是白痴吗?这是我正在做的第一个基于indexeddb的项目
  • 我读到使用WebWorkers至少可以解决口吃问题,因为它可以在另一个线程上运行。这会解决我的性能问题吗?

我愿意使用新的(草案)功能,但是每次打开应用程序时需要用户交互超过5MB的存储(例如使用配额管理API),这非常麻烦,如果可能的话,我想避免这种情况。

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

IndexedDB是您的最佳选择。如果您在数据可用时快速且频繁地存储,那么应该没问题。你不用等5秒,马上存储大约200毫秒的间隔。通常一个indexeddb写操作需要20ms。