繁体   English   中英

性能和“更好的实践”:声明与功能有一堆参数

[英]Performance & “Better Practice”: with statement vs. function with a bunch of parameters

我最近在JS中做了很多模板,所以我总是遇到“邪恶” with陈述。

它使模板更容易使用,因为您不必在对象前面添加变量。

听说声明很糟糕,而且它们可能导致性能不佳,我开始寻找另一个解决方案:

我的解决方案:带有一堆参数的函数

这是我的代码:

var locals = {
  name : "Matt",
  email : "wahoo@wahoo.com",
  phone : "(555) 555-5555"
};

var keys = [];
var values = [];

for (key in locals) {
  local = locals[key];

  keys.push(key)
  values.push(local);

}

keys = keys.join(',');

var fn = new Function(keys, "**TEMPLATE STUFF**"); // function(name, email, phone) {...}
fn.apply(this, values); // fn("Matt","wahoo@wahoo.com","(555) 555-5555")

注意:这些完成了同样的事情。 两者都被抽象出来,所以一个令人讨厌的长参数列表并不重要。

我想知道哪一个更好:使用with语句或具有疯狂数量参数的函数。

除非有人有更好的解决方案......?

谢谢! 马特穆勒

我发现你的解决方案非常臃肿。 这完全是不平凡的,而with如此简单(一行代码它本身并具有非常小的成本与你的对象遍历和数组实例)。 此外,您的解决方案需要在制作模板功能时准备模板对象(以定义其参数),在我看来,这可能会在不太灵活的情况下证明。

查看MDC 一个精心设计的模板大概很少有逻辑,重变量引用(如果不是这样,那么是应该的!),这使得with最合适的人选在这种情况下,因为应该是很少有其他查询该范围with

可能获得的任何额外性能似乎都是微优化,尽管不是理论,只是执行一些基准测试。 http://jsperf.com/with-vs-fn在您的版本的基准测试之前完成所有设置代码,但在函数执行期间执行with stuff,因此它不是很公平,尽管即使在最慢的迭代中您获得了它的速度有多快; > 400,000 ops / sec是最慢的。 我再一次不需要渲染超过400,000个模板......

你试过JS模板引擎吗? 它们通常非常快,并为您节省一些渲染代码。

我是pure.js的作者,它有点原创,但有很多其他可用的和任何品味。

与之with的问题不是表现,而是模棱两可和不可预测的行为。

例如,请参阅JavaScript的隐藏功能?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM