Web Worker比运行脚本更快吗?

时间:2016-11-02 14:24:54

标签: javascript performance web-worker

我的任务是在每个页面上创建一个专用的webworker实例,以处理在给定时间间隔内发送服务器请求,而不管用户在哪个页面上。由于这必须适用于任何浏览器,因此共享webworker不是一个选项(因此必须为每个页面加载它)。

我创建了一个脚本,认为我一直在创建一个worker,但最近我被告知工作人员实际上并没有被创建,尽管该脚本正在执行webworker的预期功能。

网络工作者的基本功能是:

onPageLoad {

    function sendHeartbeat() {
        sendRequest(URL);
    }

    function startHeartbeat() {
        if(timeToSendHeartbeat) {
             sendHeartbeat();
        } else {
             setInterval(timeRemaining, sendHeartbeat());
        }
    }
}

这让我想到使用网络工作者是否是最好的选择。使用我缺少的网络工作者有一些固有的优势吗?使用webworker不比将脚本附加到每个页面并按原样运行更有效吗?或者这个应用程序是不适合网络工作者开始的?

1 个答案:

答案 0 :(得分:3)

WebWorkers只运行脚本,因此他们不会比其他方法更快 。它们通过在不同的线程中运行而不会阻止UI或任何其他想要在主线程中运行的代码来发光。

真正的决定因素是工作代码的运行时间是否足以导致应用程序其余部分出现问题。如果你有需要按时启动的间隔或者一个长时间运行的数学运算,你可能想要启动一个工人并让它稍微运行一下,然后在最后获取结果。

就主线程而言,工作者和API调用的主体并不完全不同。您将其他人送去工作并在完成后收集结果。无论是在服务器上发生还是在其他线程上发生的事情都不那么重要,要关注的部分是主线程正在开展工作。