【问题标题】:Node.js optimization with constants使用常量进行 Node.js 优化
【发布时间】:2021-03-22 19:25:46
【问题描述】:

请比较:

// Version 1
    const oneHour = 60 * 60
    function checkTime(timePast) {
        if (timePast<7 * 24 * oneHour) {
            // Do something
        }
    }

// Version 2
    const oneHour = 60 * 60
    const oneWeek = 7 * 24 * oneHour
    function checkTime(timePast) {
        if (timePast<oneWeek) {
            // Do something
        }
    }

在对 checkTime() 的数百万次调用期间,版本 2 是否比版本 1 更快,或者 Node.js 是否足够聪明,可以只在版本 1 中进行一次额外的计算?

【问题讨论】:

  • 这应该通过常量折叠和内联来处理。
  • Sirko,所以你是说编译器会处理它,即两个版本同样快?

标签: javascript node.js optimization


【解决方案1】:

您可以像这样轻松检查它:

    const oneHour = 60 * 60
    const oneWeek = 7 * 24 * oneHour;
    const randomData = generateArray();
    
    function generateArray () {
        let arr = [];

        for(i = 0; i < 10000000; i++) {
            arr.push(Math.floor(Math.random() * 10))
        }

        return arr;
    }

    function checkTime1(timePast) {
        if (timePast<7 * 24 * oneHour) {
            Math.random()
        }
    }

    function checkTime2(timePast) {
        if (timePast<oneWeek) {
            Math.random()
        }
    }

    console.time('checkTime1');
    randomData.forEach(i => checkTime1(i))
    console.timeEnd('checkTime1');

    console.time('checkTime2');
    randomData.forEach(i => checkTime2(i))
    console.timeEnd('checkTime2');

经过多次检查更改“checkTime2”和“checkTime1”的顺序,以确保结果有效。似乎 Node.js 足够聪明,可以进行额外的计算。

【讨论】:

  • 感谢您的回答(赞成),但我希望有人能从概念上/理论上回答我的问题。
【解决方案2】:

根据这篇文章:Node.js Under The Hood #10 - Compiler Optimizations!Node 的编译器会进行Constant Folding 优化,这样const j = 3 + 9 就会变成const j = 12

【讨论】:

    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2015-05-09
    • 2021-07-17
    • 2017-05-27
    • 2015-08-01
    • 2018-01-19
    相关资源
    最近更新 更多