Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除注释是否会提高代码性能?JavaScript_Javascript_Performance - Fatal编程技术网

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

删除注释是否会提高代码性能?JavaScript,javascript,performance,Javascript,Performance,从JavaScript代码中删除注释是否会提高性能 我意识到这不是很好的编程实践,因为注释是开发的固有部分。我只是想知道他们是否真的在编译过程中增加了一些开销。无论是编译还是解释JavaScript,编译器/解释器都需要查看行,确定它是注释,然后继续(或查看行的某个区域)。对于web应用程序,还需要下载注释行 所以是的,有一些开销 然而,我怀疑你是否能找到一个现实世界中的场景,在这个场景中,这种差异很重要 如果您正在编译代码,则开销仅在编译运行期间,而不是在后续执行期间。删除注释将使Javasc

从JavaScript代码中删除注释是否会提高性能


我意识到这不是很好的编程实践,因为注释是开发的固有部分。我只是想知道他们是否真的在编译过程中增加了一些开销。

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

所以是的,有一些开销

然而,我怀疑你是否能找到一个现实世界中的场景,在这个场景中,这种差异很重要


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

删除注释将使Javascript文件更小,更易于下载

除此之外,它根本不会显著影响性能


如果您担心带宽问题,并且希望使文件变小,那么最好在将文件部署到生产网站之前,通过或类似的工具将其删除。(但要确保保留原始文件)。

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

我不确定运行速度,但删除评论会减少下载大小,这一点同样重要


您应该始终在您处理的代码中包含注释,并使用小型化器将它们剥离出来进行部署—这是一个很好的方法

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

它所带来的不同是下载到客户端浏览器的JavaScript文件的大小。如果您有很多注释,它可以显著增加JavaScript文件的大小。对于用于布局的空白字符,情况更是如此


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

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

但这并不是省略评论的理由。对您的开发代码库进行注释。在发布之前使用javascript压缩器

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

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

在此提交中删除了源长度启发式:


令人惊讶的答案是可能

正如Eric所指出的,在下载和解析方面存在开销,但这可能非常小,以至于在大多数情况下都无法察觉

然而,JavaScript性能是一个需要驯服的危险野兽,注释至少还有一种方式可以影响性能

内联 现代(截至2016年)JavaScript引擎(如V8)为确保高性能做了大量相当繁重的工作。这些引擎所做的一件事叫做JIT——“即时”编译。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);
  }
}
函数doIt(a,b){
回报率(a+b)*2;
}
函数循环(){
变量x=1,y=1;
var i;
对于(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;
  }
}
函数循环(){
变量x=1,y=1;
var i;
对于(i=0;i<100;++i){
//doIt调用现在消失了,取而代之的是内联代码
x=(x+y)*2;
}
}
JIT编译器能够确定是否可以用函数体替换对
doIt
的调用。这可以解锁巨大的性能胜利,因为它完全消除了函数调用的性能开销

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

所以,如果你在一个函数中放了太多的注释,它可能会把它推过V8的任意内联函数长度阈值,然后突然你又在支付函数调用开销

更多信息 请查看Julien Crouzet的整洁帖子以了解更多详细信息:

请注意,朱利安谈到了曲轴;V8引入了涡扇发动机,但源长度标准仍然存在

标准的完整列表位于(非常可读的)涡扇发动机源代码中,其中突出显示了源代码长度标准:


你不一定总是要把它们去掉。这是时间(终端用户的下载时间)和少量带宽成本与将其引入构建/部署过程的复杂性之间的折衷。这不是问题的答案。我想在某些情况下也是有意义的。很好,http请求。我正在拼命地加速这个使用多个.js文件的网站。我会记住这一点。获取雅虎慢速插件和谷歌的PageSpeed。不过,回顾一下你过去的问题还是个好主意。试着找出一个正确完整的答案,并接受它。当然,如果给定的问题没有好的答案,就让它保持原样