const frameDetector = (
(minFPS,alertWhen)=>{
var callBacks = [];
var dropped = 0;
var passed = 0;
const detect = last => {
if((Date.now()-last)>(1000/minFPS)){
console.log("dropped frame");
dropped++;
}else{
passed++;
}
if(dropped>alertWhen){
callBacks.forEach(callback=>callback());
return;
}
if(passed>(2*alertWhen)){
//doing well, didn't drop frames for a while so reset dropped
console.log("Doing well, reset dropped");
dropped = 0;
passed=0;
}
last = Date.now();
requestAnimationFrame(()=>detect(last));
}
detect(Date.now());
return {
addListener:x=>callBacks.push(x),
removeListener:x=>callBacks=callBacks.filter(cb=>cb!==x)
}
}
)(25,100);//minimum 25 frames per second, maximum 100 dropped frames
//handler function to handle when browser start dropping too many frames
const whenToManyFramesAreDropped = ()=>{
//turn off boost:
//https://api.highcharts.com/highcharts/boost.enabled
console.log("Dropping too many frames, go to power mode");
};
frameDetector.addListener(whenToManyFramesAreDropped);
1 回答
您可以将jenk定义为丢帧 . 假设您希望每秒最少动画25帧,低于该帧的任何内容都是丢帧 .
如果丢弃100帧然后放弃动画高图表,但如果200帧很好,则将丢帧重置为0 .
您可以调整jenk太多的规则并放弃,但下面的规则描述了以下代码中的规则: