Javascript UI线程是否比web工作线程具有优先级?

Javascript UI线程是否比web工作线程具有优先级?,javascript,web-worker,Javascript,Web Worker,如果我在一个web worker中进行一秒长的计算,我能期望UI不会因为它而结巴吗?包括手机?如果没有,我能做些什么?工作负载很容易分割成更小的块,但是大约一半的站点在计算完成之前无法工作 …我能期望UI不会因为它而结巴吗 在浏览器和设备的能力范围内,基本上是可以的。毕竟,这是web工作者存在的理由:将长期运行的进程从UI线程中移出,以便UI能够保持响应。没有保证,但是。。。根据经验:我做过测试,在主UI更新时,worker busy循环30秒以上,在桌面、Android和iOS上运行良好 这些

如果我在一个web worker中进行一秒长的计算,我能期望UI不会因为它而结巴吗?包括手机?如果没有,我能做些什么?工作负载很容易分割成更小的块,但是大约一半的站点在计算完成之前无法工作

…我能期望UI不会因为它而结巴吗

在浏览器和设备的能力范围内,基本上是可以的。毕竟,这是web工作者存在的理由:将长期运行的进程从UI线程中移出,以便UI能够保持响应。没有保证,但是。。。根据经验:我做过测试,在主UI更新时,worker busy循环30秒以上,在桌面、Android和iOS上运行良好

这些测试并不困难:

Live snippet(可能无法在所有设备上工作,因为我是如何创建工作程序的):

const chars=“|/-\ \”.split(“”);
设charindex=-1;
常量微调器=document.getElementById(“微调器”);
设置间隔(()=>{
charindex=(charindex+1)%chars.length;
spinner.innerHTML=chars[charindex];
}, 50);
函数日志(msg){
const p=document.createElement(“pre”);
p、 appendChild(document.createTextNode(msg));
文件.正文.附件(p);
}
函数main(){
const url=url.createObjectURL(
新斑点([
document.getElementById(“worker”).textContent
],{type:“text/javascript”})
);
const w=新工人(url);
w、 onmessage=函数(事件){
如果(event.data==“就绪”){
w、 后消息(“开始”);
}否则{
日志(事件数据);
}
};
}
main()

this.addEventListener(“消息”,e=>{
如果(如数据==“开始”){
让last=Date.now();
常数停止=最后一次+20000;
让我们现在开始;
而((now=Date.now())1000){
邮递信息(“勾号”);
最后=现在;
}
}
}
});
邮递信息(“就绪”);

2012年的这一轶事证据似乎表明,在当时,研究web工作者负载繁重、计算时间长的UI线程有点主观。一般来说,web worker上的负载不应该影响UI线程。你能再解释一下你想把什么卸到工人身上吗?是的,我找到并运行了16个以上的线程,在桌面或移动设备上没有太多UI延迟