为什么行内脚本创建共享工作者线程没有意义

行内脚本创建共享工作者线程没有意义。


因为每个基于行内脚本字符串创建的Blobd都会被赋予自己唯一的浏览器内部URL,所以行内脚本创建的共享工作者线程始终是唯一的。


你的理解基本是正确的,但我们可以更精确地澄清一下其中的机制和原因。


背景知识

SharedWorker 是 Web API 的一部分,用于在多个浏览上下文(如多个窗口、iframe 或 Worker)之间共享一个 Worker 实例。要创建 SharedWorker,通常的做法是提供一个指向 JavaScript 文件的 URL:

Js

const sharedWorker = new SharedWorker('worker.js');

所有使用相同 URL 创建的 SharedWorker 实例会共享同一个后台线程。

行内脚本与 Blob URL

当你尝试使用“行内脚本”(即直接在主脚本中定义的字符串代码)来创建 SharedWorker 时,常见的做法是:

Js

const 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 脚本并希望多个上下文共享它,可以考虑以下替代方案:

  1. 将脚本内容上传到服务器并获取固定 URL(不现实或有安全限制)。
  2. 使用 Service Worker 拦截特定路径并动态返回脚本内容(高级技巧,但复杂且可能不可靠)。
  3. 改用普通 Worker 或 BroadcastChannel / MessageChannel 等其他通信机制,如果共享线程不是硬性需求。

总之,你的观察是准确的:行内脚本 + Blob URL 方式不适合用于创建真正“共享”的 SharedWorker。

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端开发_穆金秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值