Greasy Fork is available in English.
Optimize CPU and GPU usage while watching YouTube videos on Firefox
脚本说明
本脚本用于在 Firefox 上观看 YouTube 时,降低页面脚本与计时器在“正在播放”状态下的高频唤醒,减少不必要的 CPU 抢占与主线程压力,从而改善卡顿、掉帧、风扇噪音与功耗表现。
脚本核心思路:在检测到视频处于持续播放且 timeupdate 在近 800ms 内持续更新时,对短间隔的 setTimeout / setInterval 回调进行“合并/节流”,把密集触发的回调推迟到更合适的时机执行。
适用范围
浏览器:Firefox(优先优化目标)
网站:YouTube 主站、YouTube Music、youtube-nocookie 的 embed 页面
适用场景:长时间播放、1080p60/4K、弹幕/评论区脚本较重、开多个标签页时更明显
不适用/无明显收益的情况
本机硬件解码/渲染本身已经非常轻(CPU 本来就很低)
主要瓶颈在网络缓冲或 GPU 驱动层
你只看短视频、很少在一个页面停留
安装与使用
安装 Tampermonkey(或 Violentmonkey)。
新建脚本,把代码粘贴进去保存。
打开 YouTube 播放任意视频即可生效,无需额外设置。
若你想做对比测试:同一视频、同一分辨率/帧率、同一窗口大小,分别启用/禁用脚本观察 CPU、掉帧与风扇噪音差异。
工作机制(更详细)
通过监听 timeupdate 来判断“视频正在连续播放”。
在播放活跃期(最近 800ms 内持续更新时间戳),对高频短周期计时器做“聚合”:
同一个 timer id 在短窗口内的重复触发,会被合并到下一次合适的调度点执行。
目的不是让计时器永远不执行,而是减少“非常密集的唤醒次数”。
通过一个“干净上下文”的 iframe 取到原生计时器函数引用,避免页面脚本对定时器函数的干扰,提高稳定性。执行完会清理 DOM,避免残留。
兼容性说明
如果浏览器不支持 WebGL/GPU 加速(极少见),脚本会直接不启用。
某些情况下(例如 YouTube 内部改动或特殊页面)可能会退化为“不生效但不报错”。
已做的 Firefox 侧优化/修复点
避免任务集合(Set)在边界条件下滞留导致长期增长。
恢复与原算法一致的双 pending 选择逻辑,避免行为偏差。
回绕策略与原逻辑一致,减少边界差异。
lastTimeUpdate 统一使用当前脚本上下文的 win,避免 iframe/顶层差异导致判断异常。
初始化过程改为 requestAnimationFrame 轮询,并在成功/失败后清理注入的容器节点,减少额外定时器唤醒与 DOM 残留。
常见问题与排错
1) 感觉“没生效”
确认脚本匹配到域名:youtube.com / music.youtube.com / youtube-nocookie.com
确认脚本在 Tampermonkey 中已启用,并刷新页面(不要只切换视频)。
用 Firefox 任务管理器或 about:performance 观察差异(同条件 A/B)。
2) 出现奇怪的页面行为/按钮延迟
此脚本会影响短周期计时器回调的触发频率。极少数页面逻辑可能对极短周期 timer 依赖较强。
排查方法:临时禁用脚本刷新页面,如问题消失,可反馈具体页面与复现步骤。
3) 想确认脚本是否在跑
在控制台输入:
window.YTB_CPUTamer_AstralRift
返回 true 代表脚本已注入并运行。
免责声明
本脚本不保证对所有硬件/所有版本 Firefox 都有显著收益。
YouTube 页面结构与内部实现可能随时变更,导致效果变化。
使用本脚本产生的任何后果需自行承担。