我正在开发一个基于Web的硬件传感器接口,可以产生大约. 250kB / s的原始数据(125 kS / 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); } }@H_301_7@具体来说:
> IndexedDB是此应用程序的正确选择吗?
>我在实施这个方面是不是白痴?这是我正在做的第一个基于IndexedDB的项目
>我已经读过,使用WebWorkers至少可以解决口吃问题,因为它可以在另一个线程上运行.这会解决我的性能问题吗?我愿意使用新的(草稿)功能,但每次打开应用程序时都要求用户进行超过5MB的存储交互(例如使用配额管理API),这非常麻烦,如果可能的话我想避免这种情况.
我不使用jquery.这不能写为本机应用程序(它必须在浏览器中运行).
解决方法
IndexedDB是您的理想选择.如果您在数据快速且频繁地存储后立即存储,则应该没问题.你不要等待5秒,然后立即以200毫秒的间隔存储.通常,indexeddb写操作需要20ms.