Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
Performance 网络工作者-firefox vs.Chrome(Chrome和MS Edge)_Performance_Google Chrome_Firefox_Web Worker - Fatal编程技术网

Performance 网络工作者-firefox vs.Chrome(Chrome和MS Edge)

Performance 网络工作者-firefox vs.Chrome(Chrome和MS Edge),performance,google-chrome,firefox,web-worker,Performance,Google Chrome,Firefox,Web Worker,我正在开发一款仍处于测试阶段的in浏览器。 总体思路是提供尽可能流畅的导航。 当然,我使用了一个web工作者池并将每个图像分成n个块,其中n是可用cpu的数量(navigator.hardwareConcurrency)。 每个工人计算并发回一个ImageData。 它在基于铬的导航器上非常有效(即Chrome和MS edge,两者的性能大致相同)。狩猎也可以 在Firefox上这太糟糕了 Firefox上的平均计算时间大约是x8,这是我电脑上CPU和工作人员的数量。因此,我怀疑Firefox

我正在开发一款仍处于测试阶段的in浏览器。 总体思路是提供尽可能流畅的导航。 当然,我使用了一个web工作者池并将每个图像分成n个块,其中n是可用cpu的数量(
navigator.hardwareConcurrency
)。 每个工人计算并发回一个ImageData。 它在基于铬的导航器上非常有效(即Chrome和MS edge,两者的性能大致相同)。狩猎也可以

在Firefox上这太糟糕了

Firefox上的平均计算时间大约是x8,这是我电脑上CPU和工作人员的数量。因此,我怀疑Firefox会同时运行worker,而不是并行运行,但这一假设应该是错误的,因为平均时间计算与活动worker的数量成比例减少,如图所示

所以。。。。有人有想法/解释吗

谢谢:)

奇怪的黑客解决方案 试图简化我的代码,以便按照善意的要求发布(再次感谢@kaido),我找到了一个解决方案。。。嗯,这不是一个真正的解决方案,让我们说它更像是一个黑客

在工作者的消息处理程序中添加anywhere一个空白
try{}catch{}
块,Firefox的性能与Chrome相当(有时更好:)

代码是

解释?

这是Firefox及其优化器中的一个bug。
我确实打开了他们的bug追踪器,现在它在最新的夜间版本(79.0a1(2020-06-04))中得到了修复。

这是Firefox和他们的优化器中的一个bug。

我确实打开了他们的bug追踪器,现在它在最新的夜间(79.0a1(2020-06-04))中得到了修复。

也许你可以展示一下你正在做什么?当然,v8能够比SpiderMonkey更好地优化您的代码,但是如果没有看到任何代码行,我们将无法帮助您找到如何使两者都满意的方法。另外,请注意,您应该启动hardwareConcurrency-1 Workers,否则其中一个将与主线程发生冲突。只需快速查看一下您的worker.js(您仍然需要将其直接包含在您的问题中,以使其符合我们的标准),我看到您每次都在创建新的ImageData对象,并通过postMessage简单地复制这些内容。这意味着,对于每个块,您将分配2个新的ArrayBuffers,而您只需要通过传输而不是复制来为每个工作人员分配一个这样的ArrayBuffers。@Kaido感谢您的帮助,并对没有包含我的代码表示歉意。非常感谢您直接在网站上查看:))。关于工人人数,你是对的。我会改变的。但是我的测试表明它对性能没有影响。我还更改了我的代码以使用arraybuffer,它现在被传输到主线程(不再复制)。没有显著的性能改进。我感谢您的道歉,但我更希望您在问题中确实提供了一些coed。对不起,您的测试用例绝对没有问题!早上太早了,我把一切都搞砸了。也许你可以展示一下你在做什么?当然,v8能够比SpiderMonkey更好地优化您的代码,但是如果没有看到任何代码行,我们将无法帮助您找到如何使两者都满意的方法。另外,请注意,您应该启动hardwareConcurrency-1 Workers,否则其中一个将与主线程发生冲突。只需快速查看一下您的worker.js(您仍然需要将其直接包含在您的问题中,以使其符合我们的标准),我看到您每次都在创建新的ImageData对象,并通过postMessage简单地复制这些内容。这意味着,对于每个块,您将分配2个新的ArrayBuffers,而您只需要通过传输而不是复制来为每个工作人员分配一个这样的ArrayBuffers。@Kaido感谢您的帮助,并对没有包含我的代码表示歉意。非常感谢您直接在网站上查看:))。关于工人人数,你是对的。我会改变的。但是我的测试表明它对性能没有影响。我还更改了我的代码以使用arraybuffer,它现在被传输到主线程(不再复制)。没有显著的性能改进。我感谢您的道歉,但我更希望您在问题中确实提供了一些coed。对不起,您的测试用例绝对没有问题!一大早我就把一切都搞砸了。