Javascript:哪个'时间处理'功能更快?

时间:2011-12-15 09:21:45

标签: javascript performance

我刚刚创建了两个版本的函数,可用于处理日期和时间并将其返回到不同的HTML元素。这些元素将显示为手机锁屏。该函数每秒调用一次,以确保它能够及时跳转到下一分钟。

  • v.1立即工作:它每秒处理每个时间单位(秒,分,日,月等)。
  • v.2一步一步地工作:如果第二个数字在任何时间“0”处理分钟。然后,如果分钟为“0”则处理小时等。

我期望v.2更快,但根据我在这里做的测试:http://jsperf.com/timecalccompare它慢了大约90%! 它真的慢了还是测试不可靠?

3 个答案:

答案 0 :(得分:1)

我会采用更简单的方法,但在更新视图和进行其余计算之前,还要检查分钟是否实际发生了变化:

此外,绝对没有理由在每次迭代时声明月份和日期数组,所以:

var months      = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var days        = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

var lastMinute = null;

function Update()
{
    var now, minutes, hours, day, date, month, daypart = "AM";
    now         = new Date();
    minutes     = now.getMinutes();
    if(minutes == lastMinute) return;
    hours       = now.getHours();
    day         = days[now.getDay()];
    date        = now.getDate();
    month       = months[now.getMonth()].substring(0, 3);

    if(minutes < 10) minutes = "0" + minutes;
    if(hours > 12) {
        hours -= 12;
        daypart = "PM";
    }
    if(hours == 0) hours = 12;

    $("#clock").text(hours + ":" + minutes + " " + daypart);
    $("#day").text(day);
    $("#date").text(date + " " + month);
    lastMinute = minutes;
}

答案 1 :(得分:0)

你的第二个版本刚刚破解,并没有做任何远程接近它应该做的事情。如果递增秒数不会使它们为零,则需要停止处理,而不是继续进行更多测试。

答案 2 :(得分:0)

建议:尽量减少DOM访问次数

您的分步脚本无效!