缩小的javascript会提高性能吗?

Ato*_*ble 52 javascript

我正在制作一个AIR应用程序(因此下载时间没有太大的影响),组合和minifing所有的javascript文件是否会影响性能?混淆会如何影响性能.

Gab*_*ley 65

通过减少加载时间(即使只是略微),Minifying可以提高整个页面的性能.

对于绝大多数javascript代码而言,缩小或混淆都不会以任何可感知的数量改变执行时间.

我建议缩小这些原因以及更多原因.一起缩小多个脚本(比如jQuery和它的插件)可以节省更多.

编辑: 正如所指出的,在受限设备上和/或使用非常大的代码库进行缩小可能会产生明显的结果.

  • 对不起,下来投票 - Minifying意味着要解析的文本更少,变量占用更少的内存(并且更快速地进行比较,散列等),因此速度和内存使用都会有相当大的改进 - 在受限设备上尤其重要. (17认同)
  • 第二个想法我已经推翻了我的投票 - 我对AIR中的特定javascript知之甚少,所以可能是错的.但肯定有一些javascript引擎缩小可以对大型应用程序产生重大影响. (11认同)
  • 精缩JS有JS*运行时没有任何起色*如果有的话它会导致性能下降,通过一些微小库所使用的减压方法击败了许多现代JS引擎的优化做的.混淆也会影响性能,因为它故意使复杂的JS与"正常"执行模式不同.一个好的混淆器实际上可以优化性能,但我已经看到混淆器可以将性能降低一半.通常,变量和属性名称长度不再是JS perf中的一个因素,因为现在JS impls中有许多不同的缓存方法. (9认同)
  • 我认为我们可能会对"缩小"意味着什么感到困惑 - 它有时仅用于描述获取额外的空白区域(如jsmin)和注释,但保留变量名称相同而一些"minifiers"(如打包器)go进一步缩短变量名称.显然,第一种只会影响代码的下载和初始解析,而第二种类型也会影响运行时性能. (4认同)
  • @Dipstick,请阅读olliej的评论(#5),因为它会使您的评论无效。即使您以某种方式正确而他错了,但性能提升仍然不能说是“相当”,但可能是“微不足道” (2认同)

adi*_*tya 21

缩小

缩小确实可以提高性能,原因有两个:

  • 缩小文件大小(因为它删除了注释和不必要的空格),因此您的脚本加载速度更快.即使它嵌入了<head>.

  • 它的解析速度更快,因为注释和空格不必明确忽略(因为它们不在那里).

结合

我写过很多HTML/JS AIR应用程序,根据个人经验,组合文件不会产生任何影响.事实上,基于某些标准(类,全局函数,SQL函数等)分离脚本是一种很好的做法.当项目变得太大时,帮助他们保持井井有条.

困惑

混淆通常是缩小和重命名变量的组合.它涉及使用eval再次炸毁代码.由于显而易见的原因,这会降低性能,但这取决于代码的大小.

我建议运行测试,以便根据您的具体情况了解这一点.

[编辑包括对AIR应用程序的特殊考虑]

  • *“事实上,根据某些标准分离脚本是一种很好的做法,当项目变得太大时,这有助于保持它们的组织性。”* - 我知道这个答案已经有近十年的历史了,但是缩小和代码打包应该由_构建工具_完成,例如 webpack。您可以将文件组织起来,然后将它们组合成一个 _bundle_ 文件(或在某些情况下更多的捆绑文件),然后仅分发该捆绑文件。 (3认同)

Art*_*kii 6

这里的每个人都谈到了缩小,但没有人谈论你的问题的第二部分 - 结合.这肯定会提高性能,甚至可能超过缩小.

多个文件需要多个HTTP请求,因此当您将它们全部放入一个文件时,只需要1个请求.这有两个重要原因:

  • 由于各种路由原因,每个单独的HTTP请求可能需要更长时间才能加载,1个文件可能会延迟整个应用程序.
  • 浏览器和其他客户端具有允许从单个域同时下载的文件的最大限制.根据应用程序中的文件数量,这可能意味着客户端将它们排队,从而使负载更长.

此外,除了缩小和组合之外,您还必须确保启用某种服务器端压缩.这可以节省90%甚至更多的传输字节数,具体取决于文件.

你可以在这里阅读更多关于压缩(gzip,deflate)的内容:http://beerpla.net/2009/06/09/how-to-make-your-site-lightning-fast-by-compressing-deflategzip-your-html -javascript-css-xml-etc-in-apache /.

  • 他指出它是一个AIR应用程序,因此没有任何HTTP连接.在AIR应用程序中,最好对脚本进行分类和分离,以使它们更有条理.实际上越多越好. (2认同)