【问题标题】:Pouch query is blocking domPouch 查询阻塞 dom
【发布时间】:2016-07-15 11:13:24
【问题描述】:

这是我测试 pouchdb 查询的代码:

主文件:

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.我在 node.js 应用程序中运行它,它正在播放音频。 2.现在,在播放音频时,我必须查询 pouchDB。我使用命令“cpulimit -p processId -l 60”将应用程序的所有实例的 cpu 限制为 60%。(以低配置对其进行测试。所以它应该在低配置的机器上工作而不会卡顿)

问题: 如果不使用“cpulimit”命令,那么它工作正常意味着我可以在没有音频卡顿的情况下查询 pouchdb,但如果我使用命令“cpulimit”限制 cpu。那么音频卡顿。

要求: 如何让它在低配置的机器上运行而不会卡顿?

【问题讨论】:

  • 这是由于您的 jquery 调用对 db 的同步行为而发生的

标签: javascript node.js node-webkit web-audio-api pouchdb


【解决方案1】:

如果 PouchDB 在 Web Worker 中运行,它不能阻塞 DOM。但是,主线程 main 中的流式音频可能会导致 DOM 阻塞。您可以使用 Chrome 中的时间轴视图查看主线程上正在运行的内容以及阻塞 DOM 的内容。

另一个可能阻塞 DOM 的事情是从后台线程向主线程发送大量数据。在上面的查询中,您使用的是attachments: true,而不是binary: true。这意味着 PouchDB 正在提取 base64 字符串数据并将其通过网络发送到 postMessage。更有效的选择可能是使用 Blob,将其转换为 ArrayBuffer(例如使用 blob-util),然后将其作为 Transferable 发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多