如何管理参数

How to manage arguments

本文关键字:参数 管理 何管理      更新时间:2023-09-26

如果我在使用搜索引擎方面太差,我提前道歉,这已经得到了回答。在这种情况下,请指出我正确的方向。

我最近开始在函数中使用参数变量,现在我需要对其进行切片。我看到的任何地方,人们都在做这样的事情:

function getArguments(args, start) {
    return Array.prototype.slice.call(args, start);
}

根据MDN的说法,这对性能不利:

你不应该对参数进行切片,因为它会阻止 JavaScript 引擎(例如 V8)中的优化。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

我有没有理由看到有人做这样的事情:

function getArguments(args, start) {
    var i, p = 0;
    var len = args.length;
    var params = [];
    for (i = start; i < len; ++i) {
        params[p] = args[i];
        p += 1;
    }
    return params;
}

你得到了你想要的参数,并且没有进行切片。所以从我的角度来看,你不会在这方面丢失任何东西,好吧,也许它使用了一点额外的内存并且稍微慢一点,但还没有到真正发挥作用的地步,对吧?

只是想知道我这里的逻辑是否有缺陷。

这是一个讨论

这是介绍

例如,这里使用内联切片

从@Eason发布的讨论来看,(在这里)辩论属于"microptimization"类别,即:我们大多数人永远不会遇到这些性能提升,因为我们的代码没有经过甚至出现在雷达上所需的迭代。

这里有一个很好的报价来总结它:

像这样的微优化总是需要权衡取舍 在代码的复杂性/可读性与其性能之间。

在许多情况下,复杂性/可读性更为重要。在这种情况下, 测试的最慢方法的运行时为 4.3 微秒。如果你正在编写一个网络服务,并且你正在对参数进行切片 每个请求两次,然后执行 100 毫秒的其他工作,一个 额外的 0.0086 ms 不会很明显,不值得花时间或 代码污染优化。

这些优化在您遇到很多时间的非常热的循环中最有帮助。使用 探查器查找热代码,并首先优化最热代码, 直到你取得的成绩令人满意。

我很满意,并且会使用Array.prototype.slice.call(),除非我检测到指向该特定代码段未命中 V8 优化器的性能故障。