删除注释是否会提高代码性能? JavaScript的

时间:2009-09-08 22:03:23

标签: javascript performance

从JavaScript代码中删除注释是否可以提高性能?

我意识到这不是很好的编程实践,因为评论构成了发展的内在组成部分。我只是想知道它们是否确实在编译期间增加了一些开销。

7 个答案:

答案 0 :(得分:11)

无论是编译还是解释JavaScript,编译器/解释器都需要查看该行,确定它是注释,然后继续(或查看该行的某个区域)。对于Web应用程序,还需要下载注释行。

是的,有一些开销。

但是,我怀疑你能找到一个真实世界的情况,这种差异很重要。

如果您正在编译代码,则开销仅在编译运行期间,而不是在后续执行期间。

答案 1 :(得分:7)

删除评论将使Javascript文件更小,更容易下载。

除此之外,它根本不会影响表现。

如果您担心带宽并希望缩小文件,最好的办法是通过JSMin或类似工具将文件部署到生产网站。 (但 SURE 保留原始文件。)

答案 2 :(得分:3)

浏览器解释代码时性能滞后?没有显着差异。 但它确实增加了bytesize,这使得下载时间更长。

但是没有理由忽略评论。保持您的开发代码库评论。在发布之前使用javascript压缩器。

此外,在发布期间,尝试将单个文件中的页面的整个javascript代码库聚集在一起,以便最小化HTTP请求。 HTTP请求会带来严重的性能损失。

答案 3 :(得分:3)

更新

截至2016年9月24日,以下答案不再准确。

此提交中删除了源长度启发式: https://github.com/v8/v8/commit/0702ea3000df8235c8bfcf1e99a948ba38964ee3#diff-64e6fce9a2a9948942eb00c7c1cb75f2

令人惊讶的答案是可能

正如Eric所说,在下载和解析方面存在开销,但这可能很小,在大多数情况下都不会引起注意。

然而,JavaScript性能是一种狡猾的危险野兽,并且评论至少还有一种其他方式可以影响性能。

内联

Modern(截至2016年)V8等JavaScript引擎在确保高性能方面做了大量相当繁重的工作。这些引擎所做的一件事就是JIT - " Just In Time"汇编。 JIT编译包括许多复杂且偶尔不直观的步骤,其中一步是将适当的小函数内联到调用站点中。

内联意味着给定代码如下:

function doIt(a, b) {
  return (a + b) * 2;
}

function loop() {
  var x = 1, y = 1;
  var i;
  for(i = 0; i < 100; ++i) {
    x = doIt(x, y);
  }
}

编译器将相当于转换为此代码:

function loop() {
  var x = 1, y = 1;
  var i;
  for(i = 0; i < 100; ++i) {
    // the doIt call is now gone, replaced with inlined code
    x = (x + y) * 2;
  }
}

JIT编译器能够确定将doIt的调用替换为函数体是否合适。这可以解锁大的性能,因为它完全消除了函数调用的性能开销。

评论

但是,JavaScript引擎如何选择适合内联的函数?有许多标准,其中一个是函数的大小。理想情况下,这将是已编译函数的大小,但V8的优化程序使用函数中人类可读代码的长度,包括注释

因此,如果你在函数中添加了太多注释,它可能会将它推过V8的任意内联函数长度阈值,并且突然你再次支付函数调用开销。

更多信息

请查看Julien Crouzet的简洁帖子了解更多详情:

https://top.fse.guru/nodejs-a-quick-optimization-advice-7353b820c92e#.uoply32op

请注意Julien谈到Crankshaft;此后V8引入了TurboFan,但源长度标准仍然存在。

完整的标准列表在此处(非常易读)TurboFan源代码中,突出显示了源长度标准:

https://github.com/v8/v8/blob/5ff7901e24c2c6029114567de5a08ed0f1494c81/src/compiler/js-inlining-heuristic.cc#L55

答案 4 :(得分:2)

这对JavaScript的执行没有明显的影响。

它的作用与下载到客户端浏览器的JavaScript文件的大小有关。如果您有大量注释,则可以显着增加JavaScript文件的大小。使用用于布局的空白字符可能更是如此。

通常的做法是在部署之前“缩小”.js文件以删除注释和空格字符。 Minifiers还可以将变量重命名为较短的名称以节省额外的空间。它们通常会使原始JavaScript对人眼不可读,因此最好确保保留未缩小文件的副本以供开发。

答案 5 :(得分:1)

另一个问题是,“此代码是废话,但我们必须在截止日期前完成”的评论可能在客户的浏览器中看起来不太好。

答案 6 :(得分:1)

我不确定运行时速度,但删除评论会减少下载量,这同样重要。

您应该始终在您使用的代码中添加注释,并使用缩小器去除它们以进行部署 - YUI Compressor是一个很好的注释。