【问题标题】:What's the most optimal way to define module variables in nodejs?在 nodejs 中定义模块变量的最佳方法是什么?
【发布时间】:2013-07-15 14:33:18
【问题描述】:

在 nodejs 中需要模块时声明变量的最佳方式是什么?不同知名节点开发者关注different styles。例如,TJ Holowaychuk 使用这种风格:

(method1)
var connect = require('connect')
  , Router = require('./router')
  , methods = Router.methods.concat('del', 'all')
  , middleware = require('./middleware')
  , View = require('./view');

另一方面,Ryan Dahl 更喜欢这种方式:

(method2)
var express = require('express');
var socketio = require('socket.io');
var bench = require('./bench');

注意:我的问题不在于样式(this gist 中已广泛介绍),而是关于这两种方法中的哪一种产生最优化的代码(如果特定于需要模块的情况)。我知道差异不会太大,但我相信这是值得了解的。例如,在 C++ 中,this question 得出的结论是,构建过程会因要解析的字符数较少而受益。除此之外,一种方法比另一种方法还有其他优势吗?

【问题讨论】:

  • “这两种方法中哪一种产生了最优化的代码” - 优化了什么?在什么意义上优化?另外,这两个示例之间的本质区别是什么?您是在问一个 var 声明还是几个?
  • @TedHopp 在初始化变量时创建最少的执行开销/内存使用量的意义上进行了优化。是的,我问的是一个var 而不是几个。

标签: javascript performance node.js optimization


【解决方案1】:

...这两种方法中哪一种产生最优化的代码...

如果 V8 在编译源代码(调试信息除外)时产生的实际机器代码存在差异,我会感到惊讶。我无法相信字符数的差异会对现实世界产生任何影响,并且一个使用逗号运算符生成单个语句来连接多个表达式而另一个产生一系列语句(一个表达式/语句)。这真的只是一种风格。

为此:

// Style 1
var express = require('express')
  , socketio = require('socket.io')
  , bench = require('./bench');

引擎实际处理这个:

// Style 1
var express, socketio, bench;
express = require('express'),
socketio = require('socket.io'),
bench = require('./bench');

...例如,声明后跟一个由逗号运算符连接的三个赋值表达式组成的语句。

为此:

// Style 2
var express = require('express');
var socketio = require('socket.io');
var bench = require('./bench');

引擎实际处理这个:

// Style 2
var express, socketio, bench;
express = require('express');
socketio = require('socket.io');
bench = require('./bench');

...例如,声明后跟三个语句,每个语句都有一个赋值表达式。

在这两种情况下,声明步骤都完全从初始化中删除,这实际上是赋值。进入上下文后,所有使用var 声明的变量(以及所有函数声明)在执行上下文的词法环境的绑定对象中创建条目,在任何分步代码之前正在运行。这就是为什么它们有时被称为“提升”的原因,也是为什么上述样式在很大程度上与引擎无关的原因。 (更多:Poor misunderstood var

就声明被分解后结果语句的差异而言,我怀疑机器代码是否存在任何真正的差异。

【讨论】:

  • “进入上下文后,所有用 var 声明的变量(以及所有函数声明)都会在执行上下文的词法环境的绑定对象中创建条目”:你知道对 this 的引用吗? ?另外,感谢您的博客文章,这真的很有趣!
  • @verybadalloc:我应该链接到它,它被 §10.5 of the specification 覆盖(在真正可怕的规范中)。享受。 :-)
猜你喜欢
  • 2013-07-30
  • 2018-11-05
  • 2011-04-13
  • 2017-09-03
  • 2015-05-10
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2021-11-28
相关资源
最近更新 更多