performance - Javascript 模块函数与全局函数性能

标签 performance closures javascript

根据以下文章,http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html ,模块函数应该比全局函数执行得更好,因为它们不必沿着全局作用域链向后查找函数。封装在模块内的函数位于其自己的私有(private)范围内,理论上这将提供相当大的性能提升。我尝试复制此内容但没有成功,此处:http://jsperf.com/module-function-vs-global-function 。是否有另一种方法可以比使用全局函数提高性能?

Benchmark.prototype.setup = function() {

window.gvar = 5;

window.gfunc = function(x) {
  return window.gvar + x;
}

window.go = function() {
  for (var i = 0; i < 100000000; i++) {
    window.gfunc(i)
  }
}

var M = (function() {
  var me = {}, mvar = 5;

  function mfunc(x) {
    return mvar + x;
  }

  me.go = function() {
    for (var i = 0; i < 100000000; i++) {
      mfunc(i)
    }
  }

  return me;
}());

};

最佳答案

我同意其他评论者的观点,即这是一个微观优化——除非您处于一个大循环中,或者您正在编写像 React 这样的框架,否则您不必担心它。

话虽这么说,我 modified your jsperf test使得全局功能测试用例的表现稍差一些。在您的原始版本中,全局函数被调用为

window.gfunc(i)

我把它改成了

gfunc(i)

因为您在原始文件中指定了 window,所以无需遍历作用域链来查找该函数,因此我预计不会有太大差异。

关于performance - Javascript 模块函数与全局函数性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152756/

相关文章:

performance - 部署在 Azure 上的服务速度极慢

database - 反规范化以何种方式提高数据库性能?

MySQL 自连接花费的时间太长——我可以简化这个查询吗?

perl foreach 循环与函数关闭规则

JavaScript 闭包和名称破坏

javascript - 用于自定义 api 的 Nodejs Promise

oracle - 将 InitialLOBFetchSize 与 EntityFramework 结合使用

javascript - 括号中的代码块在 JavaScript/jQuery 中意味着什么?

javascript - 表单(Ajax)在 KendoUI 模板内发布

javascript - 显示实时值