【问题标题】:Does loading a webextension's background.js script impact performance, even if the script's contents are minimal?加载 webextension 的 background.js 脚本是否会影响性能,即使脚本的内容很少?
【发布时间】:2021-10-30 22:16:16
【问题描述】:

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

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

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

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

*在 CPU 使用率、RAM 使用率、浏览器启动时间或页面加载时间方面

【问题讨论】:

  • @wOxxOm 你是说它取决于脚本的大小,还是其代码的复杂性?因为这个问题专门询问在 加载 javascript 文件的操作中使用的资源(与执行 XYZ 功能的脚本使用的资源相反,这是有据可查的)。
  • 您没有阅读问题。
  • 在什么方面太宽泛了?请记住,仅仅因为某个特定的人不知道某个问题的答案并不意味着该问题本身就是无法回答的。
  • 好的,如果您仍然想解决它,这可能会帮助您理解这个问题的意图:假设您有两台安装了相同操作系统和浏览器的相同计算机。计算机 A 安装了 1000 个 Web 扩展。所有扩展的内容都是相同的,每个扩展都在 popup 脚本中包含一个基本的 hello world。计算机 B 还安装了上千个 Web 扩展,它们的内容与计算机 A 的相同,除了每个还包含一个 background.js 文件,它是 EMPTY。浏览器在哪台电脑上运行更快?
  • 换句话说(也就是原始问题的话),background.js 文件的存在——以及因此在浏览器启动时加载该文件的行为——会影响性能吗?跨度>

标签: javascript google-chrome-extension firefox-addon background-process firefox-addon-webextensions


【解决方案1】:

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

浏览器启动时:

  • 当浏览器启动时,它会读取所有扩展名和其中的每个文件以验证哈希和 (CRC),因此这会很慢,尤其是在非 SSD 驱动器上。
  • 为每个后台脚本创建一个新的 JS 环境也需要时间,在一个 CPU 线程/内核上大约需要 50 毫秒或每秒 20 次扩展。

当浏览器已经运行时:

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

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2013-01-19
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多