JavaScript是否提供高分辨率计时器?
我从头开始编写了一些游戏引擎,一些是C语言,一些是Java,一些是Flash.在动画和交互式图形方面,我总是遵循相同的基本模型.使用以下设计创建基本类/结构:
void init() { /* Called once, preload essential resources here. */ }
void update(double time) { /* Updates game/animation state using high resolution time. */ }
void render(double time) { /* Updates screen graphics using high resolution time. */ }
void run()
{
double time;
init();
while (!done)
{
time = queryTime();
update(time);
render(time);
}
}
Run Code Online (Sandbox Code Playgroud)
时间对平滑动画和游戏状态计算非常重要.在本机代码Windows中,我使用QueryPerformanceCounter()和QueryPerformanceFrequency()执行queryTime()每个游戏循环中的角色并将时间传递给更新/渲染.在Java中,我使用System.nanoTime().
什么是JavaScript中的等价物?也就是说,某些函数queryTime()返回具有高精度(亚毫秒)的时间值.从我所听到的,你可以用JavaScript获得的最佳准确度大约是15毫秒......这对动画来说太可怕了.
测试条件,如果是,则执行代码
第一次执行.然后测试并执行.
所以之间的差异while,并do..while进行,程序在同时,一个试验进行比同时做多
那是
如果一个循环从1到50在while一个语句的循环中执行,它将有51个测试(50个真和1个假),语句将执行50次.
同样
如果一个循环从1到50在do..while循环中执行一个语句,它将有50个测试(第一个测试将不会执行),语句将执行50次.
所以,只有一个测试/检查少.而已.
但是当我测试执行所花费的时间时,它显示出很大的差异.
function whileFn() {
var i = 0;
while (i < 10) {
document.write(i);
i++;
}
}
function doWhileFn() {
var i = 0;
do {
document.write(i);
i++;
} while (i < 10)
}
console.time('whileFn');
whileFn();
console.timeEnd('whileFn');
document.write('<br/>');
console.time('doWhileFn');
doWhileFn();
console.timeEnd('doWhileFn');Run Code Online (Sandbox Code Playgroud)
正如您在图像和代码示例中看到的那样,while循环花费do while了15毫秒,而只花了5毫秒.
这种巨大差异背后的原因是什么?
测试10个元素
测试1000
需要23mS进行1次额外测试
测试10000
一次额外测试多397.91 mS
进行测试
Chrome(58.0.3029.110) …
我使用Node.js(v0.12.4)和Socket.io(1.3.2)在实时交易应用程序中工作.在那时,当从Node.js向GUI(Socket.Io)发出响应时,我将面临几乎(100ms)的时间延迟.
我不清楚为什么在从Node.js向GUI(Socket.IO)发送数据时存在时间延迟.
这发生在生产现场.我们也试图在生产服务器位置调试此问题,因为网络延迟.但结果相同.
请有人帮我这个吗?
这process.hrtime()是一个遗留版本的process.hrtime.bigint()方法
process.hrtime(); // -> [27511, 516453000] (seconds, remaining nanoseconds)
process.hrtime.bigint(); // -> 27511516453000n (nanoseconds)
Run Code Online (Sandbox Code Playgroud)
27511516453000 纳秒是 7.6420879036111113 小时
当我测试时,时间是 11:54 UTC 和 14:54 Locale Time