邮袋查询阻止了dom

这里是我的代码来testingpouchdb查询:

主文件:

var myAudio = new Audio("http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C% 20Major.mp3"); myAudio.play(); var worker = new Worker('worker.js'); worker.postMessage("start worker"); worker.addEventListener('message', function(e) { console.log('Worker said: ', e.data); }, false); 

Worker.js:

 importScripts("pouchdb-5.2.0.min.js"); self.addEventListener('message', function(e) { queryDocs(); }, false); function queryDocs(){ localDB.allDocs({ include_docs: true, attachments: true }, function(err, response) { if (err) { return console.log(err); } self.postMessage("returned docs:", response); }); } 

步骤:1.我正在播放一个audionode.js应用程序中运行此。 2.现在,在播放audio时,我必须查询pouchDB。我使用命令“cpulimit -p processId -l 60.”将应用程序的所有实例的CPU限制为60%(要testing它的低configuration,所以它应该在低configuration的机器上工作而不会出现口吃)

问题:如果没有使用“cpulimit”命令,那么它工作正常意味着我能够查询没有audio口吃的pouchdb,但如果我使用命令“cpulimit”。来限制CPU,那么audio是口吃。

要求:如何使其在低configuration的机器上工作而不会出现口吃?

如果在Web Worker中运行,PouchDB将无法阻止DOM。 但是,主线程主stream中的audiostream可能会导致DOM阻塞。 您可以在Chrome中使用时间轴视图来查看主线程上运行的内容,从而阻止DOM。

阻塞DOM的另一件事是从后台线程向主线程发送大量数据。 在上面的查询中,它看起来像使用attachments: true但不是binary: true 。 这意味着PouchDB正在拉取base64string数据,并通过postMessage的线路发送它。 更有效的select可能是使用Blob,将其转换为ArrayBuffer(例如使用blob-util ),然后将其作为Transferable发送。