【问题标题】:Fast (low-footprint) javascript clock快速(低占用空间)javascript 时钟
【发布时间】:2011-07-05 21:19:31
【问题描述】:

我正在尝试基于 javascript 创建一个实时时钟。

重要的是它保持低内存占用,同时保持准确。

这是我的代码:

<div id="time">...</div>

<script type="text/javascript">

    // I'm actually using a better name for such a global variable.
    // Here I'm presuming a lookup in a global variable is faster than to a local one
    var weekdays={"0":"Sun","1":"Mon","2":"Tue","3":"Wed","4":"Thur","5":"Fri","6":"Sat"};

    function refTime(){
      // get current time stamp
      var date=new Date();
      // add an hour so we get UTC+1
      date.setUTCHours(date.getUTCHours()+1) // UTC+1
      // store time components separately
      var day=date.getUTCDay(),
          hrs=date.getUTCHours(),
          min=date.getUTCMinutes(),
          sec=date.getUTCSeconds(),
          mer=false;
      // find meridiem and reduce 24h to 12h
      hrs=(mer=hrs<12) ? hrs : hrs-12;
      // generate the markup
      document.getElementById('time').innerHTML
        =weekdays[day]+'<br/>'+day+'<br/>'
        +(hrs<10?'0':'')+hrs+':'+(min<10?'0':'')+min+':'
        +(sec<10?'0':'')+sec+' '+(mer ? 'am' : 'pm');
    } // end format is: "Tue<br/>19<br/>11:43:25 am"
    setInterval(refTime,1000);

</script>

能否进一步优化?

备注:https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date

【问题讨论】:

  • 几个问题:首先,您可能想要使用setInterval,而不是setTimeout,因为后者确保您的代码只被调用一次。然后,在对 setTimeout/setInterval 的调用中,您需要将 refTime 中的大写“T”去掉,因为原始函数称为 reftime
  • 哪里有内存问题?这段代码几乎不会使用任何重要的内存。但是有几个错误:显示的时间和午夜和中午的上午/下午会出错,并且时钟只会在页面加载时更新一次。
  • 嗯,是的,必须承认我是在脑海中写下它的 :)。我关心的是该函数中的所有条件/计算内容。
  • RoToRa - 我每秒分配一个新的 Date 实例。任何内存泄漏都可能很容易累积。到目前为止看起来还不错(我在最近的浏览器中看过 vmem)。但是浏览器有点不可预测。

标签: javascript optimization memory time


【解决方案1】:

为什么不使用 Date toYYYString() 方法之一和 String.split() 来获取适当的字段。

UTC+1 有何特别之处?如果用户在北美或亚洲,他们仍然需要 UTC+1?

您可以检测浏览器并处理几种不同的日期格式。不同的broser Date.toYYYString() 方法结果:http://home.clara.net/shotover/datetest.htm

【讨论】:

  • UTC+1 是网站所在的时区。也就是说,时钟显示的是这个特定国家的当地时间。我也给这些格式看了几次,但我担心它们与我需要使用的格式太不同了。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2016-08-16
  • 2018-07-15
  • 2015-06-10
  • 2015-07-25
  • 2016-09-25
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多