使用Web Worker在JavaScript中实现计时器

问题描述 投票:0回答:1

我正在尝试使用Web Worker在JavaScript中实现计时器。我写了下面的代码。但这不起作用。有人可以指出为什么它不起作用吗?我对JavaScript没有太多经验。因此,如果有人详细解释原因,那就太好了。

这是我想要做的:

首先创建一个sharedArrayBuffer和一个工作线程。并创建另一个数组,在该数组上,我将做一些工作并想计算时间。然后将sharedArrayBuffer发送到工作线程,该工作线程会在for循环中递增数组中的第一个值。最后,我在main.js中读取该值,每次都得到0。

main.js

        var buffer = new SharedArrayBuffer(1024);
        var i;
        var uint32 = new Uint32Array(buffer);
        var myWorker = new Worker('worker.js');
        var array = new Uint32Array(8);
        array[0] = 0;
        console.log(Atomics.load(uint32,0),array[0]);

        myWorker.postMessage(buffer);

        for(i=0;i<300000000;i++) {
            array[0] += i;
        }

        console.log(i,Atomics.load(uint32,0),array[0]);

worker.js

        onmessage = function(buffer) {
        console.log('from worker');
        var uint32 = new Uint32Array(buffer.data);

        for(i=0; ;i++) {
            uint32[0] += 1;
        };
        }
javascript web-worker
1个回答
0
投票

您不应该使用这样的代码来尝试确定运行代码需要多长时间。这是没有意义的,因为增加数组中的计数与时间或任何度量单位无关。相反,有些API可用于评估性能,例如console.time()

console.time()

您还可以比较两次调用 onmessage = function(buffer) { console.time('TimeSpentInWorker'); // Your code... console.timeEnd('TimeSpentInWorker'); }; 或查看Date.now()之间的区别。

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