2026/1/15 12:16:27
网站建设
项目流程
网站描述如何写利于优化,本地网页制作软件,wordpress主题祥情在那改,深圳朝阳电子网站建设行内脚本创建共享工作者线程没有意义。因为每个基于行内脚本字符串创建的Blobd都会被赋予自己唯一的浏览器内部URL#xff0c;所以行内脚本创建的共享工作者线程始终是唯一的。你的理解基本是正确的#xff0c;但我们可以更精确地澄清一下其中的机制和原因。背景知识SharedWo…行内脚本创建共享工作者线程没有意义。因为每个基于行内脚本字符串创建的Blobd都会被赋予自己唯一的浏览器内部URL所以行内脚本创建的共享工作者线程始终是唯一的。你的理解基本是正确的但我们可以更精确地澄清一下其中的机制和原因。背景知识SharedWorker是 Web API 的一部分用于在多个浏览上下文如多个窗口、iframe 或 Worker之间共享一个 Worker 实例。要创建 SharedWorker通常的做法是提供一个指向 JavaScript 文件的 URLJsconst sharedWorker new SharedWorker(worker.js);所有使用相同 URL 创建的 SharedWorker 实例会共享同一个后台线程。行内脚本与 Blob URL当你尝试使用“行内脚本”即直接在主脚本中定义的字符串代码来创建 SharedWorker 时常见的做法是Jsconst code onconnect function(e) { /* ... */ };; const blob new Blob([code], { type: application/javascript }); const url URL.createObjectURL(blob); const sharedWorker new SharedWorker(url);这里的关键点在于每次调用URL.createObjectURL(new Blob(...))都会生成一个唯一的、浏览器内部的 URL例如blob:https://example.com/abcd-1234...。为什么这会导致“没有意义”SharedWorker 的共享机制依赖于 URL 的一致性只有当多个 SharedWorker 构造调用使用完全相同的 URL 时它们才会连接到同一个共享线程。如果你每次都动态生成一个新的 Blob 并创建新的 Object URL那么即使脚本内容完全一样URL 也不同 → 浏览器会认为这是不同的 Worker 脚本 → 创建多个独立的 SharedWorker 实例。因此无法实现“共享”失去了 SharedWorker 的核心价值。结论使用行内脚本通过 Blob URL 创建 SharedWorker 在技术上可行但由于每次生成的 URL 唯一导致无法在多个上下文之间真正共享同一个 Worker 实例因此在实际应用中通常没有意义。补充说明如果你确实需要动态生成 SharedWorker 脚本并希望多个上下文共享它可以考虑以下替代方案将脚本内容上传到服务器并获取固定 URL不现实或有安全限制。使用 Service Worker 拦截特定路径并动态返回脚本内容高级技巧但复杂且可能不可靠。改用普通 Worker 或 BroadcastChannel / MessageChannel 等其他通信机制如果共享线程不是硬性需求。总之你的观察是准确的行内脚本 Blob URL 方式不适合用于创建真正“共享”的 SharedWorker。