作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有动画的动态更新图表,在某些情况下,在较弱的机器上可能会产生卡顿。我想使用增强模式,但我不想放弃大多数客户端上的动画。有什么方法可以确定卡顿或客户端处理器时间不足的位置。一旦 Highcharts 获得此状态 -> 增强模式就会启用。
最佳答案
您可以将 jenk 定义为丢帧。假设您希望每秒至少制作 25 帧的动画,任何低于该帧的内容都会发生丢帧。
如果丢失 100 帧,则放弃 Highcharts 动画,但如果 200 帧就可以,则将丢失帧重置为 0。
您可以调整什么是太多 jenk 并放弃的规则,但下面的规则描述了以下代码中的规则:
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);
关于javascript - 仅当客户端浏览器开始卡顿时,是否可以在 highcharts 中打开升压模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48802343/
我是一名优秀的程序员,十分优秀!