您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Reduce Browser's Energy Impact for playing YouTube Video
当前为
Inspired by kona's YouTube CPU Tamer
This is for all kinds of YouTube applications, including main page, embedded video, and live chat.
- Faster
- More Stable
- Lower Battery Consumption
Note1: This hijacks Web APIs: setTimeout
, setInterval
, clearTimeout
, and clearInterval
Note2: This uses setInterval(..., 250ms)
instead of requestAnimationFrame
for background running.
Note3: If Timer Throttling2 occurs in background running, the interval would be increased, say 1000ms.
This userscript hijacks setTimeout & setInterval leading different browser behaviors as follows:
let f=function(){console.log('hello world')};
setTimeout(f,100);setTimeout(f,100);setTimeout(f,100);
Native: print out "hello world" 3 times.
Modified: print out "hellow world" 1 time. (in the same AnimationFrame)
let f=function(){console.log('hello world')};
setTimeout(f,100);setTimeout(f,110);setTimeout(f,120);
Native: print out "hello world" 3 times.
Modified: print out "hellow world" 1 ~ 3 time(s) depending on the execution time of function handler, the responsiveness of browser, and the segregation of AnimationFrames;
let f=function(){console.log('hello world')};
setTimeout(f,100);setTimeout(f,200);setTimeout(f,300);
Native: print out "hello world" 3 times.
Modified: print out "hello world" 3 times. (in 3 AnimationFrames)
clearInterval(window.f1s); clearInterval(window.f2s); let w1=0,w2=0;let f1 = ()=>{w1++}, f2= ()=>{w2++}; window.f1s=setInterval(f1,70); window.f2s=setInterval(f2, 140); setTimeout(()=>{console.log(w1,w2);},3000)
Native: print out "42 21".
Modified: print out "42 21".
clearInterval(window.f1s); clearInterval(window.f2s); let w1=0,w2=0;let f1 = ()=>{w1++}, f2= ()=>{w2++}; window.f1s=setInterval(f1,70); window.f2s=setInterval(f2, 140); setTimeout(()=>{console.log(w1,w2);},3000)
Native (Timer Throttling2): print out values between 3 and 4. (e.g. "4 4", "4 3")
Modified, if no Timer Throttling: print out values between 12 and 13 (e.g. "13 12", "13 13", "12 12", "13 12").
Remarks: 3000/250 = 12
clearInterval(window.f1s); clearInterval(window.f2s); let w1=0,w2=0;let f1 = ()=>{w1++}, f2= ()=>{w2++}; window.f1s=setInterval(f1,5); window.f2s=setInterval(f2, 10); setTimeout(()=>{console.log(w1,w2);},3000)
Native: print out "600 300"1.
Modified: print out "600 301"1 or "600 300"1.
clearInterval(window.f1s); clearInterval(window.f2s); let w1=0,w2=0;let f1 = ()=>{w1++}, f2= ()=>{w2++}; window.f1s=setInterval(f1,5); window.f2s=setInterval(f2, 10); setTimeout(()=>{console.log(w1,w2);},3000)
Native (Timer Throttling2): print out values between 3 and 4. (e.g. "4 4", "4 3")
Modified, if no Timer Throttling: print out values between 12 and 13 (e.g. "13 12", "13 13", "12 12", "13 12").
Remarks: 3000/250 = 12
1 Actual values could be smaller due to your UI/network activity.
2 Timer Throttling is the browser's native behavior on background applications.
What Happens to setTimeout() / setInterval() Timers Running on Inactive Browser Tabs ?