被javascript混淆而导致循环行为

我想以说我对javascript相对较新来作为开头。

我正在对一些非常简单的webGL和本地javascript for循环进行基准测试。我正在生成一个随机数组,然后对数组中的每个项目执行一些任意的数学运算。在我的第一个测试中,我惊讶地发现,在一个1000万个整数的数组上,webGL代码的性能优于本机javascript for循环(声称以200毫秒左右的速度完成,比webGL快2-3倍)。这似乎是完全不现实的。当我尝试打印阵列时,时间增加到大约3秒(仍然比我预期的要快得多)。作为参考,当我打印返回的数组(从转换缓冲区)时,webGL的运行时间不会明显增加。

我最初的想法是,懒惰地执行javascript for循环?但是一些快速谷歌搜索似乎反驳了这一点。谁能解释这是怎么回事?

基本的for循环在这里。 Javascript是在Windows计算机上的Chrome版本81.0.4044.138(正式版)(64位)上执行的。

function profileCPU() {
    var randomInt = function (max) { return Math.floor(Math.random() * max); };
    var randomPoint = function (max) { return (randomInt(max)); };

    var points = [];
    for (var i = 0; i < 10000000; i++) { points.push(randomPoint(1000)); }
    var t2 = performance.now();
    var newArr = [points.length];
    for (let i = 0; i <= points.length; i++) {
        newArr[i] = (points[i]/7.453) + 5;
    }
    console.log(newArr); // this line commented
    var t3 = performance.now();
    console.log("CPU function took " + (t3 - t2) + " milliseconds.");
}
评论