加载网络扩展的 background.js 脚本是否会影响性能,即使脚本的内容很少?

Does loading a webextension's background.js script impact performance, even if the script's contents are minimal?

安装 Web 扩展时,考虑到它是一个必须加载的单独 javascript 文件,仅存在 background.js 文件是否会对性能产生负面影响*?

对于大多数实际情况,人们可以假设答案是“几乎没有”,但是对于处理能力较差的旧计算机和可能具有数十到数百个扩展的浏览器,是否有可能在后台加载所有这些脚本的累积压力可能会产生相当大的影响,即使脚本的内容不是特别占用资源?

从 CS 的角度来看,加载 javascript 文件的行为是否会影响性能,还是只有在执行文件内的代码时才会使用系统资源?

换句话说,要尽可能选择最轻量级的 Web 扩展,应该避免 background.js 个文件,还是根本不重要?

*根据 CPU 使用情况、RAM 使用情况、浏览器启动时间或页面加载时间

这个问题的答案可能是肯定的,也可能不是,也可能是,这取决于这些扩展程序在其后台脚本中具体做了什么,以及用户做了什么。不过,有些负面因素总是存在的。

浏览器启动时:

  • 当浏览器启动时,它会读取所有扩展名和里面的每个文件来验证哈希和 (CRC),所以这样做会很慢,尤其是在非 SSD 驱动器上。
  • 为每个后台脚本创建一个新的 JS 环境也需要时间,一个 CPU thread/core.
  • 大约需要 50ms 或每秒 20 个扩展

当浏览器已经运行时:

  • 如果扩展程序的后台脚本被声明为非持久性的,它会在每次显示弹出窗口或触发已注册的 API 事件时加载它,然后它会被卸载。
  • 如果后台脚本持久化(在Firefox中一直存在),这是作者没有重新定义时的默认模式,后台脚本在扩展未使用时不会卸载,会消耗10- 20 MB 或有时更多,如果扩展有错误或浏览器中有错误。数百个扩展程序将消耗 GB 的 RAM,这会减少您的网页和其他应用程序的可用内存量。
  • 每个扩展程序的后台脚本都在 OS 分配的扩展程序进程中运行,但浏览器试图限制它们使用的系统进程数以避免崩溃 OS,所以当有有很多扩展浏览器将减少它用于隔离正常网站的进程数量,如果有许多带有不同站点的选项卡,它将开始在一个系统进程中对不相关的站点进行分组,从而降低它们对 Spectre 等边信道攻击的抵抗力.根据浏览器及其版本的不同,扩展程序也可能被分组在一个系统进程中,这更糟糕,因为它们被允许使用各种可以管理用户数据的安全 API,因此侧信道攻击更容易成功破坏性的。