Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用JavaScript可以实现并行性吗?_Javascript_Performance - Fatal编程技术网

用JavaScript可以实现并行性吗?

用JavaScript可以实现并行性吗?,javascript,performance,Javascript,Performance,我试图在JavaScript函数上获得更好的性能。我在画布上用myPopulation=50000点绘制,大约需要230ms。由于我在另一个频率为100ms的循环中有这个,我得到了一个延迟,因为下面的函数 function drawThis(intervals) { ctx.clearRect(0, 0, myWidth, myHeight); ctx.beginPath(); for (var i = 0; i < myPopulation; i++) {

我试图在JavaScript函数上获得更好的性能。我在画布上用myPopulation=50000点绘制,大约需要230ms。由于我在另一个频率为100ms的循环中有这个,我得到了一个延迟,因为下面的函数

function drawThis(intervals) {
    ctx.clearRect(0, 0, myWidth, myHeight);

    ctx.beginPath();
    for (var i = 0; i < myPopulation; i++) {
        ctx.arc(persons[i].posX, persons[i].posY, 2, 0, 2 * Math.PI);
        if (persons[i].infected) {
            ctx.fillStyle = "#FF0000";
        }
        else {
            ctx.fillStyle = "#000000";
        }
        if (i < myPopulation - 1) {
            ctx.moveTo(persons[i + 1].posX, persons[i + 1].posY);
        }
    }
    ctx.fill();
与他们平行。所以伪代码应该是:

divide myPopulation in equal parts

drawThis(interval[0][0], interval[0][1]);
drawThis(interval[1][0], interval[1][1]);
drawThis(interval[2][0], interval[2][1]);
drawThis(interval[3][0], interval[3][1]);
[...]

wait for all of them to finish
continue
我读过很多关于JavaScript作为单线程语言、Promises、Web Workers等的文章,但我找不到任何适合我的问题的解决方案

有什么想法或暗示吗? 我是新来的,如果我的问题有任何问题,也请告诉我。
提前感谢

作为澄清,承诺是一致的。另一方面,工人则是在一条单独的线程中运行的。您还可以查看“OffscreenCanvas”,这是一种在单独线程中渲染画布的方法,这样绘图就不会冻结您的主进程。欢迎使用堆栈溢出。你的问题很好,画圆圈很慢。我建议您通过加快绘图操作来解决问题,而不是尝试使用线程。看看这个和这个:这能回答你的问题吗?非常感谢您的回复。(1) 将点改为矩形而不是圆形已经提高了我的性能。(2) 当我想要更多的时候,下一步我将追随OffscreenCanvas,我将投身于网络工作者和承诺。如果我的理解是正确的,一些被承诺包裹的网络工作者将适合我的问题,因为我可以带着承诺哭泣。然后。。。让他们都完成。我会尽快公布我的结果。
divide myPopulation in equal parts

drawThis(interval[0][0], interval[0][1]);
drawThis(interval[1][0], interval[1][1]);
drawThis(interval[2][0], interval[2][1]);
drawThis(interval[3][0], interval[3][1]);
[...]

wait for all of them to finish
continue