所以基本上我一直在尝试弄清为什么我的代码在chrome中返回的代码与在nodejs中返回的代码不同
函数看起来像这样
function func() {
try {
for (var a = "", t = 1e3, e = [Math.abs, Math.acos, Math.asin, Math.atanh, Math.cbrt, Math.exp, Math.random, Math.round, Math.sqrt, isFinite, isNaN, parseFloat, parseInt, JSON.parse], n = 0; n < e.length; n++) {
var o = [],
m = 0,
r = performance.now(),
i = 0,
c = 0;
if (void 0 !== e[n]) {
for (i = 0; i < t && m < .6; i++) {
for (var b = performance.now(), d = 0; d < 4e3; d++) e[n](3.14);
var k = performance.now();
o.push(Math.round(1e3 * (k - b))), m = k - r
}
var s = o.sort();
c = s[Math.floor(s.length / 2)] / 5
}
a = a + c + ","
}
return a != null ? a : func();
} catch (a) {
return "exception"
}
}
Nodejs返回
66.8,71.4,69.4,67.8,105,97.4,30.8,24,20.8,13.4,12.8,13.6,41.8,734.2,
但是chrome js返回
85,59,59,69,111,105,86,73,107,54,73,59,69,845,
我已经尝试了好一阵子了,但是我无法让它返回相同的东西希望有人能给我一个很好的解释。
正如评论所指出的,这个问题的简短版本是:“看来performance.now
的Chrome浏览器和Node的实现不同,对吗?”>
好吧,这都是开源的,自己看看!这是Chrome的实现:https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/timing/performance.cc;l=1005;drc=da6ef73266f6110abc5e788457f0e8f9257dd5b6;bpv=1;bpt=1
这是节点的:https://github.com/nodejs/node/blob/d0a3bf1f115a619ffcd8804d5b006555433af13b/lib/perf_hooks.js#L155
除了实现上的差异外,高精度定时显然不能精确再现。