使用循环挂壁时间优化功能性能

时间:2013-06-02 04:30:52

标签: javascript optimization

我使用下面的函数更新并调用构建动画条形图的drawAccel();函数。

function messagecb(header, message) {
    if(header.type == 6) {
       // processEchoReply(message);

   } else if(header.type == 4) {
        // accel
        var accels = message.b64UnpackAccelMsg();

        for(var index = 0; index < accels.length; ++index) {
            var accel = accels[index];
            var totalClock = accelEpochAdjust(accel.clock);

            addAccelDatum(totalClock, accel.x,  accel.y, accel.z);

        }

    if ( typeof messagecb.counter == 'undefined' ) {
      messagecb.counter = 0;
    }

    ++messagecb.counter;
    if (messagecb.counter % 10 === 0) {
      drawAccel();
    }

    } else if(header.type == 3) {
       // info
       var info2 = message.b64UnpackInfo2Msg();

       displayCurrentPosition(info2.fixtime, info2.lat, info2.lon, info2.alt);
       displayMobileStatus(info2.rssi, info2.bandClass, info2.batt);

    } else if(header.type == 11) {
        btReceive(header, message);
}

}

我在IE8中遇到了一些间歇性的性能问题。所以我想 收集在更新for循环内运行的已用墙时间,而不是调用drawAccel()渲染器,除非我使用的时间少于50%。

伪代码示例:

  if ((lastEnteredTime - lastExitedTime)/(currentTime - lastEnteredTime) < .5){
       drawAccel();
  } else {
   //do nothing 
  }

我的问题是我不知道如何获得最后输入的时间和循环的最后退出时间以便我可以运行这个条件。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我不清楚你到底想要做什么,但是这样的事情会让你接近。 +new Date()会给你自1970年1月1日以来的毫秒数,所以在不同的地方进行相同的调用应该能够得到你想要的东西

var start = +new Date();

for(var index = 0; index < accels.length; ++index) {
    var accel = accels[index];
    var totalClock = accelEpochAdjust(accel.clock);

    var current = +new Date();
    var timeElapsedInMs = current - start;
    //not sure the exact test you want to run here

    addAccelDatum(totalClock, accel.x,  accel.y, accel.z);
}

根据您的评论进行修改。因此,如果你总是希望拥有lastEntered和lastExited值,那么这样的东西可能是你想要的

var lastEntered, lastExisted = +new Date();

for(var index = 0; index < accels.length; ++index) {
    lastEntered = +new Date();

    var accel = accels[index];
    var totalClock = accelEpochAdjust(accel.clock);

    var timeElapsedInMs = current - start;
    //not sure the exact test you want to run here

    addAccelDatum(totalClock, accel.x,  accel.y, accel.z);

    lastExisted = +new Date();
}

从那里你可以做任何你需要的比较。