关于JavaScript的时间精度

原创 2006年12月19日 19:51:00

对aimingoo的JavaScript时钟间隔的问题~一文的回复:

12月21日更新:aimingoo又写了一个总结,从底层上解释了16ms的原因。

时间间隔是约数,通常会认为在10ms-20ms之间,来源应该是win的时钟限制。为什么没有人确切的说是16ms?因为这个16ms来源于不准确的new Date!

function test() {
    var dates = [];
    var d = new Date();
    count = 0;
    while (count < 10) {
        var x = new Date();
        var t = x.getTime() - d.getTime();
        if (t > 0) {
            dates.push(t);
            d = x;
            count++;
        }
    }
    alert(dates);
}

上面这个test在xp下运行,也是打印出15,16...。也就是时钟精度就只有这点。
但是放到vista上看就会发现不同了,会出现1,1,1,1...,说明vista上的时钟精度提高了!但是setInterval的结果是形如16,3,18,16,13,18,13,17,21,9,8,22,1,6...这样的。

所以,xp系统上的16ms间隔反映的是时钟精度,而不是真实的interval间隔值,真实的间隔值可能是一个难以度量的随机值。

在ff上出现0的情况,并不是因为java的问题(ff可以不启用java的),而是因为ff允许0间隔(即与ie不一样,如setInterval可以设0ms),比方说前一个任务做了太久后面一个会立即跟上,而ie和opera至少休息一个周期。

BTW,实际上setTimeout和setInterval的实现上当无差异,之所以不同是因为我们代码书写方式的不同,假如习惯于在干活的代码之前而不是之后写下一个setTimeout,那可能就没有差别了。反之,在干活后setTimeout可以确保出让足够的cpu时间,而setInternal就可能始终霸占着cpu。如果要做一个给其他人用的任务调度器,则就应该使用setTimeout。比如说做动画效果的timeline,我倾向于使用单一的setTimeout来构建任务队列,然后执行动画运算时,根据当前时间来计算,而不是帧数,这样在cpu不行的情况下,就类似于跳帧的效果。如果自己执行一些单纯的小任务,能保证不会耗费过多cpu,用setInterval就很直接方便了。

js动态显示实时时间

利用js动态显示实时时间
  • u014691098
  • u014691098
  • 2017年04月08日 10:52
  • 4545

js中取得不同精度的时间,时间戳,时间差的方法

http://blog.csdn.net/kingviker/article/details/7951106 http://jimliu.net/2014/03/16/hrt-in-js/ h...
  • tiangej
  • tiangej
  • 2017年09月08日 09:38
  • 177

再谈JavaScript时钟中的16ms精度问题.

上一篇BLOG中,通过测试我们发现 JavaScript的时钟是16ms的间隔. 对于IE来说,每次总会发生16ms的间隔;对于firefox来说,会存在0ms的间隔. 对于后者,我曾解释说:可能是J...
  • aimingoo
  • aimingoo
  • 2006年12月21日 11:25
  • 7566

JavaScript中的高精度计时

HRT(High Resolution Timing, 高精度计时)在一些场合有很大的作用,比如游戏开发中,需要精确的计算两帧之间的时间差。 在JS中常常用(new Date())....
  • maodoudou1217
  • maodoudou1217
  • 2015年10月22日 23:07
  • 531

SQLite数据库不同时间精度查询注意事项

SQLite数据库在存储时间时提供了多种格式可供存储,不同存储方式对查询有啥影响没?不同时间精度的存储又会对查询结果有啥影响,最近做项目碰到这个问题我做如下一个总结: 在数据库表中,要表示一个时...
  • chenzujie
  • chenzujie
  • 2013年06月14日 22:20
  • 3739

JavaScript 浮点数运算的精度问题

问题描述 在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此。 所以我们在打印 1.00 这样的浮点数的结果是 ...
  • helloxiaoliang
  • helloxiaoliang
  • 2017年05月25日 10:57
  • 1195

javascript加减乘除精度

alert(1/3);//弹出: 0.3333333333333333  alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999  alert...
  • y6300023290
  • y6300023290
  • 2013年10月28日 17:27
  • 2505

mysql 5.6中的时间类型的新精度

在mysql 5.6中,time,timestamp,datetime都可以精确到微妙,并指定微秒的精确度了,  比如如下的例子:    CREATE TABLE `t` (    `id` i...
  • z69183787
  • z69183787
  • 2016年07月01日 11:52
  • 2490

Windows高精度时间

目 录 第1章 计时    1 1.1 GetTickCount    1 1.2 timeGetTime    1 1.3 QueryPerfo...
  • Hanford
  • Hanford
  • 2016年12月12日 11:03
  • 1301

关于Float处理精度算法方法之一,供学习用

Java Float类型 减法运算时精度丢失问题 package test1; public class Test2 { /** * @param args */ publ...
  • hteao01
  • hteao01
  • 2017年09月23日 18:30
  • 91
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于JavaScript的时间精度
举报原因:
原因补充:

(最多只允许输入30个字)