如何管理参数
How to manage arguments
如果我在使用搜索引擎方面太差,我提前道歉,这已经得到了回答。在这种情况下,请指出我正确的方向。
我最近开始在函数中使用参数变量,现在我需要对其进行切片。我看到的任何地方,人们都在做这样的事情:
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 优化器的性能故障。
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何访问声音管理器2创建的声音对象
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- jquery设置为使用参数运行
- JS编译器/包管理器,用于版本控制
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 当第二个参数为空时管理JavaScript调用的构造
- 如何在谷歌跟踪代码管理器 noscript 标签中参数化容器 id
- 如何管理参数
- 用javascript管理对象构造参数
- 如何为Ajax请求添加/管理持久URL参数
- 在服务器上的所有会话管理请求中传递参数
- 如何管理ASP.. NET参数和Javascript键