javascript - Performance & "Better Practice": with statement vs. 带一堆参数的函数

标签 javascript templates with-statement

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

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

听说 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 东西,所以这并不公平,尽管即使在最慢的迭代中您也知道它有多快; >400,000 次操作/秒是最慢的。我怀疑你需要每秒渲染超过 400,000 个模板......

关于javascript - Performance & "Better Practice": with statement vs. 带一堆参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5660200/

相关文章:

javascript - 在数组对象内循环

Django模板timesince过滤器-限制

c++ - 如何使用可变参数模板初始化指针?

c++ - 根据给定的索引集获取参数包的子集

javascript - SVG 图像无法在 Internet Explorer 11 的 echarts 工具箱中呈现

javascript - 在触发实际滚动进一步事件之前允许更多滚动(松弛)

javascript - 我可以通过模式匹配 data-* 属性名称(而不是属性值)来选择 <element> 吗?

vb.net - With... End With vs Using in VB.NET

python - Python中从一个类中调用多个函数而无需每次都重复类名

python - 长时间保持 80 个字符的边距?