【问题标题】:Best JavaScript compressor [closed]最佳 JavaScript 压缩器 [关闭]
【发布时间】:2010-09-06 22:26:01
【问题描述】:

最好的 JavaScript 压缩器是什么?我正在寻找一种工具:

  • 易于使用
  • 具有很高的压缩率
  • 产生可靠的最终结果(不会弄乱代码)

【问题讨论】:

  • 有人知道2011年的情况吗?
  • 现在是 2012 年,我认为 UglifyJS 和 Closure 是赢家,我使用 UglifyJS,它通常会胜过其他一切。
  • 我将htmlcompressor.com/compressor.html 用于我的 jQuery Mobile 多页应用程序。它采用带有
  • 现在是 2017 年 - 现在最新的是什么?
  • 现在是 2020 年。使用默认的“安全”配置,UglifyJS 略微获胜,因为它更“安全”。对于高级功能,Closure Compiler 将 UglifyJS 交给了自己。带有 ADVANCDED_OPTIMIZATIONS 的闭包编译器可以执行各种技巧,帮助您同时优化工作流程和代码。请参阅 stackoverflow.com/a/50355530/5601591 了解 Closure Compiler 的出色示例(免责声明:我在其他地方找不到合适的博客文章,所以我不得不将您推荐给我写的一篇文章)。

标签: javascript compression


【解决方案1】:

我最近发布了UglifyJS,这是一个用 JavaScript 编写的 JavaScript 压缩器(在 NodeJS Node.js 平台上运行,但它可以很容易地修改为在任何 JavaScript 引擎上运行,因为它不需要任何 @987654326 @内部)。它比YUI Compressor 和Google Closure 都快得多,在我测试过的所有脚本上它的压缩效果都比YUI 好,而且它比Closure 更安全(知道处理“eval”或“with”)。

除了删除空格,UglifyJS 还做了以下事情:

  • 更改局部变量名称(通常为单个字符)
  • 加入连续的 var 声明
  • 避免插入任何不需要的括号、括号和分号
  • 优化 IF(在检测到不需要时删除“else”,尽可能将 IF 转换为 &&、|| 或 ?/: 运算符等)。
  • 尽可能将foo["bar"] 转换为foo.bar
  • 尽可能从对象文字中的键中删除引号
  • 在导致代码更小的情况下解析简单表达式 (1+3*4 ==> 13)

PS:哦,它也可以“美化”。 ;-)

【讨论】:

  • 我们在企业级应用程序中使用 uglify。它做得很好。
  • 你能和 node 上的 jsmin 相比吗?
  • 最近 Uglify 丢弃的 API 调用
  • @mishoo 嘿,我喜欢你的 Uglify JS2。这些天我的网络工作不正常......我想在 Windows 上使用它。一些解决方案? :o)
  • @mishoo 我显示了 git 链接,但不知道如何使用它
【解决方案2】:

几年后重新审视这个问题,UglifyJS,似乎是目前最好的选择。

如下所述,它运行在 NodeJS 平台上,但可以轻松修改以在任何 JavaScript 引擎上运行。

---下面的旧答案---

Google 发布了Closure Compiler,它似乎正在生成迄今为止最小的文件here 和here

之前的各种选项 were as follow

基本上Packer 在初始压缩方面做得更好,但是如果您要在通过网络发送之前压缩文件(您应该这样做)YUI Compressor 会得到最小的最终大小。

测试是在 jQuery 代码上完成的。

  • 原jQuery库62885字节,gzip后19758字节
  • jQuery 用 JSMin 缩小 36,391 字节,gzip 后 11,541 字节
  • 使用 Packer 压缩 21,557 字节,gzip 后 11,119 字节的 jQuery
  • 使用 YUI Compressor 压缩的 jQuery 31,822 字节,gzip 后 10,818 字节

@daniel james 在评论 compressorrater 中提到,这表明 Packer 在最佳压缩方面领先于图表,所以我猜是 ymmv

【讨论】:

  • Packer 有一个关闭“base62 编码”的选项 - 对于 jQuery,它在 gzip 之后压缩比 yui 小。这是因为 jquery 使用了 'eval' 和 'with' 来阻止 'safe' 压缩器进行某些压缩,但是 packer 会忽略它们。一般不安全,但 jQuery 已针对 Packer 进行了测试。
  • 另外,如果你不相信我,试试compressorrater.thruhere.net。
  • 别忘了打包机的缺点——解压时间。
  • 当心,google 闭包有时可能是最差的压缩器(输出甚至比原来的还要大)——它默认将字符串中的非 ascii 字符转换为 \uxxxx 文字。使用例如--charset UTF-8(如果您确定以某种方式让浏览器知道)
  • ClosureCompiler 输出对我不起作用。 jscompress.com 工作
【解决方案3】:

YUI Compressor 是要走的路。它具有很高的压缩率,经过良好测试并在许多顶级网站中使用,而且,我个人推荐。

我已将它用于我的项目,没有出现任何 JavaScript 错误或故障。它有很好的文档。

我从未使用过它的 CSS 压缩功能,但它们也存在。 CSS 压缩同样有效。

注意:虽然 Dean Edwards 的 /packer/ 实现了比 YUI Compressor 更好的压缩率,但我在使用它时遇到了一些 JavaScript 错误。

【讨论】:

  • Packer 在文件大小方面看起来不错,但事实证明,解包所花费的时间通常超过通过管道传输较小文件的时间增益。在浏览器中执行的时间方面,我见过的大多数实际浏览器基准测试都比使用 gzip 提供的原始未压缩文件慢。
  • 这里是一个在线版本的压缩器,以防你不想让 java 运行:refresh-sf.com/yui
  • 使用打包程序压缩的脚本不需要解包,除非您检查 Base62 编码选项(您不应该这样做,因为它是外行的 gzip - 我相信大多数现代服务器都支持 gzip) .对 base62 编码文件进行 gzip 压缩是没有意义的,因为没有剩余可供利用。最新版本的打包器(最终版本)没有引入错误,没有解包开销(只要您不进行 base62 编码),并且仍然实现了最大的压缩。现在还有一个命令行版本的打包器。只需使用 npm 安装它,如下所示:npm install packer。 (=D
【解决方案4】:

我使用ShrinkSafe from the Dojo project - 它很特别,因为它实际上使用 JavaScript 解释器 (Rhino) 来处理在代码中查找符号并了解它们的范围等,这有助于确保代码在它运行时能够正常工作从另一端出来,与许多使用正则表达式来做同样事情的压缩工具相反(这不太可靠)。

我实际上在我当前的 Visual Studio 解决方案中的 Web Deployment Project 中有一个 MSBuild 任务,它运行一个脚本,该脚本在我们部署之前通过 ShrinkSafe 运行解决方案的所有 JS 文件,它运行良好。

编辑:顺便说一句,“最佳”是有争议的,因为“最佳”的标准会根据项目的需要而有所不同。就个人而言,我认为 ShrinkSafe 是一个很好的平衡点;对于一些认为最小尺寸 == 最好的人来说,这将是不够的。

编辑:值得注意的是,YUI 压缩器也使用了 Rhino。

【讨论】:

    【解决方案5】:

    试试JSMin,得到了C#、Java、C等端口,也一应俱全。

    【讨论】:

    • C# 端口是否被移动/移除了?
    【解决方案6】:

    如果您使用 Packer,只需选择“缩小变量”选项并 gzip 生成的代码。 base62 选项仅适用于您的服务器无法发送 gzip 压缩文件的情况。带有“shrink vars”的 Packer 可以更好地压缩 YUI,但如果您在某处跳过分号,可能会引入错误。

    base62 基本上是一个穷人的 gzip,这就是为什么 gzip 压缩 base62-ed 代码比 gziping shrink-var-ed 代码提供更大的文件。

    【讨论】:

      【解决方案7】:

      JSMin 是另一个。

      【讨论】:

        【解决方案8】:

        在搜索银弹时,找到了这个 题。对于 Ruby on Rails http://github.com/sstephenson/sprockets

        【讨论】:

          【解决方案9】:

          Here's the source code 的 HttpHandler 可以做到这一点,也许它会帮助你

          【讨论】:

            【解决方案10】:

            Here 是一个 YUI 压缩脚本 (Byuic),它可以找到所有 js 和 css 并压缩/(可选)混淆它们。很高兴集成到构建过程中。

            【讨论】:

              【解决方案11】:

              bananascript.com 曾经给我最好的结果。

              【讨论】:

                【解决方案12】:

                KJS压缩

                http://opensource.seznam.cz/KJScompress/index.html

                Kjscompress/csskompress 是一组两个 应用程序(kjscompress a csscompress) 删除不重要的 文件中的空格和 cmets 包含 JavaScript 和 CSS。两个都 是命令行应用程序 GNU/Linux 操作系统。

                【讨论】:

                  【解决方案13】:

                  Js Crush 是一个很好的压缩器,可以在您缩小后使用。

                  【讨论】:

                    猜你喜欢
                    • 2011-07-17
                    • 2019-11-03
                    • 1970-01-01
                    • 2012-07-13
                    • 2010-11-04
                    • 2013-10-30
                    • 2010-12-11
                    • 1970-01-01
                    相关资源
                    最近更新 更多