安装web扩展时,考虑到它是一个必须加载的单独的javascript文件,仅仅存在一个background.js文件是否会对性能产生负面影响?
在大多数实际情况下,人们可以假设答案是"几乎没有"。但是,对于处理能力较弱的旧计算机,以及可能有数十到数百个扩展的浏览器,在后台加载所有这些脚本的累积压力是否可能产生相当大的影响,即使脚本的内容并不特别占用资源?
从CS的角度来看,加载javascript文件的行为是否会影响性能,或者只有当文件内的代码被执行时才会使用系统资源?
换句话说,要选择最轻量级的web扩展,应该避免background.js文件,还是根本不重要?
*在CPU使用率,RAM使用率,浏览器启动时间或页面加载时间方面
这个问题的答案可以是"是"、"否"one_answers"可能",具体取决于这些扩展在其后台脚本中做什么,以及用户做什么。但总有一些缺点。
浏览器启动时:
- 当浏览器启动时,它读取所有扩展名和每个文件来验证哈希值(CRC),所以这将是缓慢的,特别是在非ssd驱动器上。
- 为每个后台脚本创建一个新的JS环境也需要时间,在一个CPU线程/核心上大约每秒50毫秒或20个扩展。
当浏览器已经运行时:
- 如果一个扩展的后台脚本被声明为非持久化,它将在每次弹出窗口显示或触发注册API事件时加载它,然后它将被卸载。
- 如果后台脚本是持久的(它总是在Firefox中),当作者不重新定义它时,这是默认模式,当扩展未使用时,后台脚本不会卸载,并且如果扩展有错误或浏览器中有错误,则会消耗10-20 MB或有时更多。数百个扩展将消耗千兆字节的RAM,这减少了您的网页和其他应用程序的可用内存量。
- 每个扩展的后台脚本运行在其扩展的进程分配的操作系统,但浏览器试图限制他们使用的系统进程的数量,以避免崩溃的操作系统,所以当有很多扩展,浏览器将减少进程的数量,它用来隔离正常的网站,如果有许多标签不同的网站,它将开始分组不相关的网站在一个系统进程,从而减少他们对侧通道攻击,如幽灵。根据浏览器及其版本,扩展也可能被分组在一个系统进程中,这更糟糕,因为它们被允许使用各种安全API来管理用户数据,因此成功的侧通道攻击更具破坏性。