相同的函数在chrome javascript和nodejs中返回的有所不同

问题描述 投票:-3回答:1

所以基本上我一直在尝试弄清为什么我的代码在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,

我已经尝试了好一阵子了,但是我无法让它返回相同的东西希望有人能给我一个很好的解释。

javascript node.js function v8
1个回答
0
投票

正如评论所指出的,这个问题的简短版本是:“看来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

除了实现上的差异外,高精度定时显然不能精确再现。

© www.soinside.com 2019 - 2024. All rights reserved.