探讨脚本注入 SC为何不及TM快 #988
Replies: 4 comments 3 replies
-
Beta Was this translation helpful? Give feedback.
-
|
另外说一下TM/SC的注入方式: TM 有两种情况,一种是
首先是默认的配置:
你文中的是 manifest.json 的内容? "content_scripts": [],
"user_scripts": {
"api_script": "content.js"
},我没有找到 user_scripts 这个字段(这就是你说的非API模式?):https://developer.chrome.com/docs/extensions/reference/manifest/content-scripts?hl=zh-cn 而且我添加上,只得到了一个错误:
基于上述描述,我觉得你说的内容有问题 |
Beta Was this translation helpful? Give feedback.
-
|
我尝试在 edge://serviceworker-internals/?devtools 手动停掉 SW,这时候 SC会比TM慢,但是TM的SW我停掉后,马上又会恢复,无法验证 然后我又测试了一下冷启动(重启浏览器),TM甚至比SC的 document-end 还慢,可以看到 run TM 是在 SC 的
|
Beta Was this translation helpful? Give feedback.
-
|
在 example.com 测加载速度完全无意义吧,站点本身毫无脚本加载,你甚至会发现document.addEventListener("readystatechange",...)在反复刷新时,都会出现事件错误,因为页面加载得太快了。 至少也是 content-security-policy.com 这种有网站自身脚本加载的站点来测试。 |
Beta Was this translation helpful? Give feedback.






Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
1)TM 是全域注入
content.js, 而不是ScriptCat 用 API 注入 (虽然注入后都是一个全域脚本)2)API 注入的全域比非API注入较慢
3)TM 不使用
inject.js, 而是在content.js绕过CSP注入一次性代码因此在TM,它用最快的
content.js, 直接接入到 content 环境,然后把脚本以 <script> 绕过CSP 注入到网页环境可是SC,首先
content.js和inject.js都要注入,还要跟其他几百个脚本一起排队。不是排最头的话,前面的小鸡就要等后面的母鸡和公鸡载入后才能正常运行。
因为TM用的是非API注入,所以用链结打开浏览器时必会执行。
而SC用的是API注入。在浏览器刚打开时,
service_worker还是非活跃状态。要等到Chrome API 事件触发后才唤醒。唤醒后才去检查一下有没有未注册好的脚本,有的话就注册一下那些动作。
Beta Was this translation helpful? Give feedback.
All reactions