Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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_Web Worker - Fatal编程技术网

Javascript 网络工作者的速度有多快;什么消息?

Javascript 网络工作者的速度有多快;什么消息?,javascript,web-worker,Javascript,Web Worker,我想知道网络工作者之间的传输是否会成为一个瓶颈。 我们应该在触发任何事件的同时发布消息,还是应该小心并尽量限制两者之间的交流 让我们举个例子。如果我有一个动态构建的巨大数组(例如,来自手势识别器的mousemove或touchmove的接触点数组),以迭代方式传输数据是否更有效?即,我们一收到数据就发送每个元素,并让工作人员将其存储在其一侧?还是最好将其存储在主线程上,并在最后一次发送所有数据,特别是当不能使用可转移对象时?它们与运行它的cpu核心一样快。话虽如此,进程之间的通信总是会产生一些开

我想知道网络工作者之间的传输是否会成为一个瓶颈。 我们应该在触发任何事件的同时发布消息,还是应该小心并尽量限制两者之间的交流


让我们举个例子。如果我有一个动态构建的巨大数组(例如,来自手势识别器的
mousemove
touchmove
的接触点数组),以迭代方式传输数据是否更有效?即,我们一收到数据就发送每个元素,并让工作人员将其存储在其一侧?还是最好将其存储在主线程上,并在最后一次发送所有数据,特别是当不能使用可转移对象时?

它们与运行它的cpu核心一样快。话虽如此,进程之间的通信总是会产生一些开销,因此批处理它可能会为您带来一些额外的性能。就我个人而言,我可能会使用计时器每25毫秒发送鼠标位置或位置历史记录


你应该问自己的问题是:你多久需要更新一次?每秒更新一次是否足够?100? 1000? 在什么时候,您只是为了没有附加值而消耗cpu周期。

您可以在
uint16数组中缓冲数据。然后,您可以执行一个小技巧,移动数据,而不是复制数据。有关介绍,请参见

1:对于小于16x16米的屏幕来说,像素密度为0.25像素/毫米的屏幕应该足够了,我相信这是世界上大多数屏幕

1.多快? 首先,让我们测试一下网络工作者的速度

我创建了这个测试片段,试图测量工人的实际速度。但是,尝试在这里很重要。事实上,我发现只有可靠的测量时间的方法才会影响时间,就像我们在现代物理学理论中所经历的那样

代码明确地告诉我们,缓冲是一个好主意。第一个文本框设置要发送的数据总量。第二个设置要分割数据的样本数。您很快就会发现样本的开销是显著的。复选框允许您选择是否传输数据。正如预期的那样,随着数据量的增加,这一点开始变得重要起来

请原谅这些乱七八糟的代码,我不能强迫自己在编写激动人心的测试片段时表现得很好。 我创造了这个tjes

函数WorkerFN(){
log('WORKER:WORKER已准备好数据');
//预期的数据量
var-expectedData=0;
//收到的数据量
var receivedData=0;
self.onmessage=函数(e){
变量类型=e.data.type;
如果(类型=“数据”){
接收数据+=e.data.data.bytellength;

self.postMessage({type:“timeResponse”,timeStart:e.data.time,timeHere:performance.now()字节:E.DATA.DAT.ByTelStand,ALL:ExpDeDATA DATA0&和DATAI,我甚至不知道更新。假设处理只会出现在末尾。直到那时,所有发送的消息都只涉及存储数据。例如,我知道如果不能使用可转移对象,则必须至少考虑时间。复制可能已经不可忽略的所有数据。因此,考虑到我猜如果没有实际传输时间,最好以迭代方式发送数据?也许您甚至不需要缓冲。进程之间总会有一些传输时间,因此缓冲仍然是一个好主意。如果您真的需要所有数据,则只需使用固定的缓冲区大小或固定的传输间隔发送它们。@QuentinRoy在阅读您的问题时,我没有注意到您不能使用可转移对象,因此我发布了一个使用可转移对象的答案。我花了这么多时间使用它,这有点令人沮丧。您确定不能使用可转移接口吗?我刚刚意识到事实上,我并没有真正回答最初的问题——多快。拉杜博格丹是对的。我可能会纠正他说得非常快。慢的是单次传输的开销,我可以用我添加到我的答案中的性能测试脚本来验证。老实说,我在你的帖子后的最后一句话末尾添加了最后一点。所以我的错不是你的错。对此很抱歉。@QuentinRoy上次编辑我的答案时添加的基准测试表明,传输/复制之间的差异可以忽略不计。但真正重要的是缓冲-尝试在1、10或100个数据块中发送100Mb,你会发现速度会急剧下降。