【发布时间】:2010-10-10 15:19:14
【问题描述】:
您使用什么来最小化和压缩 JavaScript 库?
【问题讨论】:
-
开始赏金,看看自 2009 年以来是否有任何新进展。
-
问题的措辞方式,应该是社区维基。任何人都可以回答这个问题(即使答案是“无”),而且不能有任何错误的答案......
标签: javascript compression minimize jscompress
您使用什么来最小化和压缩 JavaScript 库?
【问题讨论】:
标签: javascript compression minimize jscompress
我已经使用YUI Compressor 很长时间了,并且没有遇到任何问题,但最近开始使用Google Closure Compiler 并取得了一些成功。到目前为止我对它的印象:
我已经转而在简单的“编译”模式下使用 Google Closure Compiler,因为它总体上略胜于 YUI Compressor。我使用它的次数比我使用的 YUI Compressor 少得多,但就我目前所见,我会推荐它。
另一个我尚未尝试但听起来很有希望的是Mihai Bazon's UglifyJS。
【讨论】:
我使用YUI Compressor。似乎把工作做好了!
【讨论】:
这里有很多可能性:
根据我的个人经验,我建议您使用 Dojo SDK 构建自定义构建,然后您可以将其配置为使用他们常用的 ShrinkSafe 编译器或 Google Closure,which they now support as well。
在压缩方面,我认为 Google Closure 是迄今为止对我来说效果最好的一个,但我通常对 ShrinkSafe 感到满意,而且它更老、更健壮,而 Closure Compiler 看起来有点新在区块上(例如,您的利益相关者可能不太喜欢)。
虽然有些人只对 YUI Compressor 发誓。我个人不能保证。
现在,如果您的问题是压缩库,而不仅仅是压缩您自己的 JavaScript 代码,显然它会涉及更多内容,因为您将需要这些工具中的大多数来导出不应该使用的符号重命名或剥离。大多数体面的压缩器会删除他们认为未使用的功能 - 通常是库中的情况,如果没有绑定到项目,显然 - 并更改名称以使其更短并使用更少的字符 - 这也是一个问题,因为你显然想要一个公共API 不可篡改。
您也可以找到有关此主题的其他主题,并在工具的支持文档中找到信息。 您可能还想看看 JSBuilder2,它是 Dojo 的 Build 工具(使用 ShrinkSafe 或 Closure Compiler)的某种附属品,用于 ExtJS(使用 YUI 压缩器)。
(抱歉,作为新的 SO 用户,我无法添加多个链接,因此无法直接链接到工具。)
编辑:关于一些答案中表达的担忧,即压缩可能会引入错误,并且由于代码没有被破坏,它使调试更容易:是的,这是一个有效的担忧。然而:
【讨论】:
我根本不会最小化 JavaScript:gzip 压缩对我来说已经足够了,而且还有一个额外的好处是错误消息仍然有用。
【讨论】:
我也使用 YUI Compressor。我在我的项目中使用了这样的 ant 任务:
<!--
YUI Compressor tasks
http://www.julienlecomte.net/yuicompressor/README
-->
<property name="yuicompressor.jar"
value="C:/devlibs/yuicompressor-2.2.4/build/yuicompressor-2.2.4.jar"/>
<target name="js.compress">
<!-- Create min directory under js direcrtory if it doesnt exist -->
<mkdir dir="${js-directory}/min" />
<apply verbose="true" executable="java" parallel="false" failonerror="true">
<fileset dir="${js-directory}" includes="*.js"/>
<arg line="-jar"/>
<arg path="${yuicompressor.jar}"/>
<srcfile/>
<arg line="-o"/>
<mapper type="glob" from="*.js" to="${js-directory}/min/*-min.js"/>
<targetfile/>
</apply>
</target>
【讨论】:
Dean Edward's packer 实现了一些相当不错的压缩比。它具有命令行实现,可以在持续集成过程中使用。
【讨论】:
UglifyJS 是一个新的。
UglifyJS 比 YUI 压缩得更好 压缩机和差不多 谷歌闭包编译器。为了 例如,压缩版本的 来自 Google Closure 的 jQuery 编译器仅小 403 字节 比 UglifyJS 产生的版本 - 感人的! UglifyJS 也是跑得最快的远射,击败 关闭超过 6 秒!
另外,生成的代码 UglifyJS 比代码更安全 闭包生成。例如, 闭包不知道怎么处理 eval 或 with{} - 它只是记录一个错误 并继续重命名变量 反正。这显然会导致 损坏的代码。 UglifyJS 没有 这个问题。
更多信息可以在这里找到: http://badassjs.com/post/971960912/uglifyjs-a-fast-new-javascript-compressor-for-node-js
【讨论】:
Google 的 closure 工具
您可以将缩小版本映射到常规源代码,以便在 Firebug 中使用其插件进行调试。
【讨论】:
我之前尝试过 YUI 压缩器,但它给了我错误消息。
我建议使用 JSMIN 来缩小你的 javascript:
【讨论】:
这是一个来自 Microsoft 的解决方案,您可以将其集成到 Visual Studio 中,以便在您构建项目时自动缩小文件。
安装:
从http://aspnet.codeplex.com/releases/view/40584下载msi
您可能需要在完成后重新启动计算机。
使用方法:
编辑您的 .csproj 文件并在文件末尾包含以下内容(但在 </Project> 标记之前):
<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />
<Target Name="AfterBuild">
<ItemGroup>
<JS Include="**\*.js" Exclude="**\*.min.js;Scripts\*.js" />
<CSS Include="**\*.css" Exclude="**\*.min.css" />
</ItemGroup>
<AjaxMin
JsSourceFiles="@(JS)"
JsSourceExtensionPattern="\.js$"
JsTargetExtension=".min.js"
CssSourceFiles="@(CSS)"
CssSourceExtensionPattern="\.css$"
CssTargetExtension=".min.css"/>
</Target>
现在,当您构建项目时,所有不以 .min.js、.min.css 结尾的 CSS 和 js 文件都将被缩小(请参阅“排除”属性以排除其他文件被缩小)。
【讨论】:
http://code.google.com/p/jsmin-php/
老道格·克罗克福德 :-) 这样做的美妙之处在于,通过缓存控制,您可以仅在需要时获得一些可爱的自动压缩。或者在我的一个项目中,我只是输出压缩/gzip 压缩的文件,并在我进行更改时删除它们。对于开发环境,我只是不调用缩小脚本。
【讨论】:
我在JavaScript::Minifier::XS 周围使用了一个简单的(3-4 行)包装脚本。
【讨论】:
这里有一篇文章描述了如何在构建过程中使用 YUI Compressor 来最小化文件:Compressing JS files as part of your build process
【讨论】:
我使用 perl 的 JavaScript::Minifier。它工作得很好,你可以例如使用 perl 替换一些短语。
【讨论】:
http://caja.appspot.com/tools/index 完成所有三个 HTML/CSS/JS。
【讨论】:
https://jawr.dev.java.net/ 非常适合缩小和版本控制
【讨论】:
【讨论】: