Tôi đã thực hiện một số thử nghiệm để tìm ra câu trả lời cho điều này trong thực tế.
Firefox chưa hỗ trợ tạo kết nối WebSocket từ Web Worker: https://bugzilla.mozilla.org/show_bug.cgi?id=504553 Vì vậy, Firefox không liên quan cho đến khi lỗi đó được giải quyết.
IE 10 không có support for Shared Web Workers do đó không có liên quan. Vì vậy, để lại Chrome.
Dưới đây là ví dụ để kiểm tra công nhân web được chia sẻ.
Đầu 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>
Sau đó, việc thực hiện của người lao động chia sẻ bản thân trong shared.js
:
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);
Kết quả thử nghiệm trong Chrome 20 (câu trả lời):
Khi trang được tải đồng thời trong hai tab riêng biệt, số lượng kết nối tăng lên mỗi khi một trong các trang được tải lại hoặc liên kết tự tham chiếu được nhấp.
Nếu chỉ có một phiên bản duy nhất của trang được tải thì số kết nối không bao giờ thay đổi khi trang được tải lại hoặc liên kết được nhấp.
Vì vậy, trong Chrome 20: Công nhân Web được chia sẻ không duy trì tải lại trang và nhấp chuột điều hướng liên kết.
Sự kiện lưu trữ hiện tại là lựa chọn tốt nhất của bạn cho điều đó, nhân viên được chia sẻ có thể sau này ... http://stackoverflow.com/questions/19125823/how-is-it-possible-to-share-single-js-resource -between-browser-tabs/19165781 # 19165781 – inf3rno