JavaScript – 共享Web工作者在单个页面重新加载,链接导航

Shared Web Workers旨在允许来自同一站点(来源)的多个页面共享一个Web Worker。

但是,如果您只在站点上只有一个窗口/标签,并且导航到同一站点上的另一个页面,那么从规范(或其他教程和共享工作者的信息)来看,共享工作程序是否会持续存在,这一点尚不清楚。

在来自共享工作器的WebSocket连接的情况下,这将是最有用的,当连接到站点时,它将保持连接状态。例如,想像一下股票行情或聊天区域即使在该网站被导航时也会持续(而不必重新连接WebSocket)。

我已经做了一些测试,以找出实际的答案。

Firefox还不支持从Web Workers创建WebSocket连接:https://bugzilla.mozilla.org/show_bug.cgi?id=504553因此,在解决错误之前,Firefox是不相关的。

IE 10没有support for Shared Web Workers,所以它也不相关。这样就可以让Chrome

以下是测试共享Web员工的示例。

首先是HTML:

<!DOCTYPE html>
<html>
<body>
    <a href="shared.html">reload page</a>
    <script>
        var worker = new SharedWorker("shared.js");
        worker.port.addEventListener("message", function(e) {
            console.log("Got message: " + e.data);
        }, false);
        worker.port.start();
        worker.port.postMessage("start");
    </script>
</body>
</html>

然后在shared.js中实现共享的worker本身:

var connections = 0;

self.addEventListener("connect", function(e) {
    var port = e.ports[0];
    connections ++;
    port.addEventListener("message", function(e) {
        if (e.data === "start") {
            var ws = new WebSocket("ws://localhost:6080");
            port.postMessage("started connection: " + connections);
        }
    }, false);
    port.start();
}, false);

在Chrome 20中测试结果(答案):

当页面同时加载在两个单独的选项卡中时,每次重新加载其中一个页面或单击自引用链接时,连接计数就会增长。

如果仅加载页面的单个实例,则当重新加载页面或单击链接时,连接计数不会更改。

因此,在Chrome 20中:共享Web工作人员不会在页面重新加载和链接导航点击中持续存在。

翻译自:https://stackoverflow.com/questions/9336774/do-shared-web-workers-persist-across-a-single-page-reload-link-navigation

转载注明原文:JavaScript – 共享Web工作者在单个页面重新加载,链接导航