首页 文章

只有当客户端的浏览器开始下降时,是否可以在高图中启用提升模式?

提问于
浏览
0

我有一个动态更新的图表与动画,可以在弱机器上的某些条件下产生jank . 我想使用升压模式,但我不想放弃大多数客户端的动画 . 有没有办法确定jank或客户端处理器时间不足的位置 . 一旦Highcharts获得此状态 - >启用升压模式 .

1 回答

  • 1

    您可以将jenk定义为丢帧 . 假设您希望每秒最少动画25帧,低于该帧的任何内容都是丢帧 .

    如果丢弃100帧然后放弃动画高图表,但如果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);
    

相关问题