如何立即渲染数组的每个生成元素

问题描述 投票:0回答:1
javascript arrays vue.js vuejs2
1个回答
0
投票

如果您像上面那样在主 UI 线程上同步生成单词,则不能。更新 UI 的线程与运行 JavaScript 代码的线程相同,在循环运行时不能运行其他任何线程。您可以将生成移动到工作线程,并在生成单词时将其post每个单词(或小批量单词)到您的 Vue 代码中。即使工作线程仍在生成其他单词,在主 UI 线程上运行的 Vue 代码也可以自由渲染该单词/那些单词。

以下是基于现有循环的工作脚本的粗略示例:

self.addEventListener("message", (e) => {
    if (e.data?.type === "start") {
        generateWords();
    }
});

function generateWords() {
    const count = 10000;
    let symbols = "abcdefghijklmnopqrstuvwxyz1234567890";
    let word = "";
    for (let i = 0; count > i; i++) {
        while (word.length < 100) {
            word += symbols[Math.floor(Math.random() * symbols.length)];
        }
        self.postMessage({ type: "word", word });
        word = "";
    }
}

然后是启动进程并监听结果的代码:

const worker = new Worker("./worker.js");
worker.addEventListener("message", (e) => {
    if (e.data?.type === "word") {
        // ...use `e.data.word` here, it's the word that was received...
    }
});
worker.postMessage({ type: "start" });

您必须对其进行调整以适应您的 Vue 代码,但这是基本方法。

© www.soinside.com 2019 - 2024. All rights reserved.