我的任务是在每个页面上创建一个专用的Webworker实例,以处理在给定的时间间隔内发送服务器请求,而不考虑用户所在的页面。由于这必须适用于任何浏览器,因此不能选择共享Webworker(因此必须为每个页面加载它)。
我创建了一个脚本,以为自己正在创建一个工作程序,但是最近我得知,虽然该脚本正在完成Webworker的预期功能,但实际上并未创建工作程序。
Webworker的基本功能是:
onPageLoad {
function sendHeartbeat() {
sendRequest(URL);
}
function startHeartbeat() {
if(timeToSendHeartbeat) {
sendHeartbeat();
} else {
setInterval(timeRemaining, sendHeartbeat());
}
}
}
这使我开始思考是否使用Webworker甚至是最佳选择。使用我所缺少的网络工作者有一些固有的优势吗?使用Webworker是否比将脚本附加到每个页面并按原样运行更有效?还是这个应用程序不适合网络工作者?
最佳答案
WebWorkers只是运行脚本,因此它们不会比其他方法快。它们在不同的线程中运行,而不阻塞UI或任何其他要在主线程中运行的代码,从而发挥作用。
真正的决定因素是要进行人工处理的代码运行的时间是否足够长,以至于导致应用程序其余部分出现问题。如果您有需要按时触发的时间间隔或运行时间非常长的数学运算,则可能要启动一个工作器并放一会儿,然后最后获取结果。
就主线程而言,工作程序和API调用在原理上并没有完全不同。您要派别人去做这项工作,并在他们完成工作时收集结果。无论是在服务器上发生还是在另一个线程上发生,都没有那么重要,要关注的部分是主线程没有完成工作。