54

你用什么来最小化和压缩 JavaScript 库?

4

17 回答 17

42

我已经使用YUI Compressor很长时间了,并且没有遇到任何问题,但最近开始使用Google Closure Compiler并取得了一些成功。到目前为止我对它的印象:

  • 在减少文件大小方面,它通常优于 YUI Compressor。简单模式下少量,高级模式下大量。
  • 迄今为止,简单模式与 YUI Compressor 一样可靠。我喂它的任何东西都没有显示出任何问题。
  • 高级“编译”模式非常适合某些脚本,但脚本的显着减小是以大量干预代码为代价的,而代码的破坏机会很大。有一些方法可以处理其中一些问题,了解它在做什么可以大大避免问题,但我通常避免使用这种模式。

我已经转而在简单的“编译”模式下使用 Google Closure Compiler,因为它总体上略胜于 YUI Compressor。我使用它的次数比我使用的 YUI Compressor 少得多,但从我目前看到的情况来看,我会推荐它。

我尚未尝试但听起来很有希望的另一个是Mihai Bazon 的 UglifyJS

于 2010-09-21T13:46:10.390 回答
34

我使用YUI 压缩机。看来工作做得很好!

于 2009-03-01T14:40:02.800 回答
22

您在这里有很多可能性:

根据我的个人经验,我建议您使用 Dojo SDK 构建自定义构建,然后您可以将其配置为使用他们常用的 ShrinkSafe 编译器或 Google Closure,它们现在也支持

在压缩方面,我认为 Google Closure 是迄今为止对我来说效果最好的一个,但我通常对 ShrinkSafe 感到满意,而且它更老、更健壮,而 Closure Compiler 看起来有点像新手(例如,您的利益相关者可能不太喜欢)。

不过,有些人只对 YUI Compressor 发誓。我个人不能真正保证它。

现在,如果您的问题是压缩而不仅仅是您自己的 JavaScript 代码,那么它显然会涉及更多,因为您将需要大多数这些工具来导出不应重命名或剥离的符号。大多数体面的压缩器会删除他们认为未使用的功能 - 通常是库中的情况,如果没有绑定到项目,显然 - 并更改名称以使其更短并使用更少的字符 - 这也是一个问题,因为你显然想要一个公共API 不可篡改。

您也可以找到有关此主题的其他主题,并在工具的支持文档中找到信息。您可能还想看看JSBuilder2,它是 Dojo 的 Build 工具(使用 ShrinkSafe 或 Closure Compiler)的某种附属品,用于 ExtJS(使用 YUI 压缩器)。

(对不起,作为一个新的 SO 用户,我不能添加多个链接,所以我不能直接链接到工具。)

编辑:关于一些答案中表达的担忧,即压缩可能会引入错误,并且由于代码没有被破坏,它使调试更容易:是的,这是一个有效的担忧。然而:

  • 如果您使用压缩器,即使激活了 gzip 压缩,您也会在带宽方面获得非常显着的改进(并且您可以通过使压缩器的工作更轻松来学习利用 gzip 压缩
  • 您应该在调试和生产模式下品尝您的代码,以确保行为相同。我的意思是,这也是你工作的一部分……
  • 其中一些压缩器已经存在了一段时间,并且不会真正将错误引入您的代码。他们实际上只是重新组织事物并替换字符串,真的。
  • 一些压缩器(例如 dojo 构建系统)带有允许您生成压缩和未压缩输出的选项,这样您就可以启用不同的调试和生产模式,例如使用查询参数。
于 2010-09-25T14:23:36.933 回答
12

我根本没有最小化 JavaScript:gzip 压缩对我来说已经足够好了,并且还有一个额外的好处是错误消息仍然有用。

于 2009-03-01T16:19:36.303 回答
11

我也使用 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>
于 2009-03-01T16:19:23.903 回答
5

Dean Edward 的封隔器实现了一些相当不错的压缩比。它具有命令行实现,可以在持续集成过程中使用。

于 2009-03-01T14:51:25.987 回答
5

UglifyJS是一个新的。

UglifyJS 比 YUI Compressor 压缩得更好,与 Google Closure Compiler 差不多。例如,来自 Google Closure Compiler 的 jQuery 压缩版本仅比 UglifyJS 生成的版本小 403 个字节——令人印象深刻!UglifyJS 也是跑得最快的远投,以超过 6 秒的优势击败了 Closure!

此外,UglifyJS 生成的代码比 Closure 生成的代码更安全。例如,Closure 不知道如何处理 eval 或 {} - 它只是记录一个错误并继续重命名变量。显然,这会导致代码损坏。UglifyJS 没有这个问题。

更多信息可以在这里找到:http: //badassjs.com/post/971960912/uglifyjs-a-fast-new-javascript-compressor-for-node-js

于 2010-09-22T00:20:16.980 回答
4

谷歌的关闭工具

您可以将缩小版本映射到常规源代码,以便在 Firebug 中使用其附加组件进行调试。

于 2010-09-23T20:18:36.947 回答
3

我以前尝试过 YUI 压缩器,但它给了我错误消息。

我建议使用 JSMIN 来缩小你的 javascript:

http://www.crockford.com/javascript/jsmin.html

于 2009-03-01T16:19:01.033 回答
3

这是 Microsoft 的一个解决方案,您可以将其集成到 Visual Studio 中,以便在构建项目时自动缩小文件。

安装:

从以下位置下载 msi:http ://aspnet.codeplex.com/releases/view/40584

完成后您可能需要重新启动计算机。

使用:

编辑您的 .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 文件都将被缩小(请参阅“排除”属性以排除其他文件被缩小)。

于 2010-09-27T13:36:42.080 回答
1

http://code.google.com/p/jsmin-php/

好老道格·克罗克福德 :-) 这样做的美妙之处在于,通过缓存控制,您可以仅在需要时获得一些可爱的自动压缩。或者在我的一个项目中,我只是输出压缩/gzip 压缩的文件,并在我进行更改时删除它们。对于开发环境,我只是不调用缩小脚本。

于 2010-09-21T13:49:29.287 回答
0

我在JavaScript::Minifier::XS周围使用了一个简单的(3-4 行)包装脚本。

于 2009-03-01T15:39:07.680 回答
0

这是一篇描述如何在构建过程中使用 YUI Compressor 来最小化文件的文章:Compressing JS files as part of your build process

于 2010-09-21T10:43:42.827 回答
0

我使用 perl 的 JavaScript::Minifier。它工作得很好,您可以使用 perl 替换一些短语。

于 2010-09-21T13:50:18.197 回答
0

http://caja.appspot.com/tools/index完成所有三个 HTML/CSS/JS。

于 2010-09-25T01:17:22.557 回答
0

https://jawr.dev.java.net/非常适合缩小和版本控制

于 2010-09-27T14:34:16.410 回答
0

有一个非常好的在线压缩器:

http://javascriptcompressor.com/

如果你想要更多的压缩,你也可以缩小变量。

希望能帮助到你

于 2010-09-28T07:45:46.343 回答