在 Firefox 中积极限制后台选项卡的正确设置是什么?
几年前,我偶然发现这篇文章解释about:config
了 Firefox 中用于限制背景(和前景)选项卡的各种设置,但我永远无法理解它们的含义。例如,不清楚这些选项中的每一个的单位是什么(秒、毫秒?),以及增加该值是否会更多地限制选项卡或减少它们。
dom.min_background_timeout_value
dom.timeout.background_budget_regeneration_rate
dom.timeout.background_throttling_max_budget
dom.timeout.budget_throttling_max_delay
dom.timeout.foreground_budget_regeneration_rate
dom.timeout.foreground_throttling_max_budget
dom.timeout.throttling_delay
具体来说,让我们采取一个超级激进的节流策略:我想让后台选项卡每 30 分钟只授予 1 毫秒的执行时间。我希望此策略在选项卡不再处于前台后 1 毫秒生效。也就是说,在我将标签页留在后台后的 30 分钟内,标签页的 CPU 使用率不得超过 0.00%。
这些 Firefox 设置的值应该是什么才能实现这种激进的节流行为?
这可以通过在中设置以下条目来实现
about:config
根据window.setTimeout 上 mozilla 文档的“非活动标签”部分:
所以火狐上的默认值
dom.min_background_timeout_value
是15分钟(实际上设置900,000
为单位是毫秒),这对于试图节省电池和稀缺RAM / CPU资源的设备来说是有意义的。将该值加倍以达到 30 分钟 =1,800,000
.请注意,有一个
about:config
用于限制跟踪脚本 (dom.min_tracking_background_timeout_value
) 的不同条目也应增加到与1,800,000
ms 相同的值。默认情况下,当标签不再在前景中时不会限制。因此,我们设置
dom.timeout.throttling_delay
为1
ms 以在它们不再处于前台时几乎立即开始限制选项卡。我不知道大多数其他
about:config
条目是做什么的。这些budget
特别令人困惑,欢迎进一步澄清。对于比简单的“大量限制所有计时器”更复杂的工作负载:即让计时器在较短的情况下更频繁地运行,Firefox 中还有一个计时器预算机制。这种预算机制只允许计时器在有“预算”的情况下运行,该预算会因给定选项卡中的计时器花费运行的时间量而减少,并因缓慢的重新生成而增加。当它为负时,定时器被阻止运行。请注意,计时器似乎是针对每个标签的:功能 Ratonale 强烈暗示,对计时器“礼貌”的标签会得到奖励,而不会受到惩罚的标签。
about:config 中的以下选项可用于调整:
dom.timeout.background_budget_regeneration_rate
降低计时器获得更多运行时间的速率。它以在选项卡中的后台选项卡计时器预算增加一毫秒之前必须经过的实时毫秒数为单位。dom.timeout.background_throttling_max_budget
设置可以在预算内存储的最大毫秒数。一旦预算这么大,它就会停止增加。dom.timeout.budget_throttling_max_delay
设置给定选项卡中可以强制等待的最大毫秒数。它可以替代预算机制的其余部分。因此,如果将regeneration_rate 设置为60,并将max_budget 设置为3000,那么该选项卡将获得每分钟实时的一秒执行时间。如果在这种情况下将 max_budget 设置为 3000,则在三分钟后,预算将保持 3 秒的执行时间,并且将停止增加:因此在六分钟后,它仍将保持三秒。假设 max_delay 设置为 1000(即,预算最多只能使计时器保持一秒钟)。请注意,这些设置远非最佳。
如果上面选项卡中的计时器随后花费 5 秒钟执行(这不太可能),则预算将保持在 -2000 毫秒。如果该选项卡中的另一个计时器立即过去,它将被迫等待 2 分钟,同时预算重新生成为正值。但是,由于 max_delay 非常低(1 秒),因此无论如何都会在触发计时器之前经过 1 秒。
我不知道这如何与 Michael 描述的更传统的超时机制相互作用。有关该机制的更多详细信息,请参阅此邮件列表帖子。