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

时间:2009-03-01 14:37:02

标签: javascript compression minimize jscompress

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

17 个答案:

答案 0 :(得分:42)

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

  • 在文件大小减少方面,它通常优于YUI Compressor。在简单模式上少量,在高级模式上有很多。
  • 到目前为止,简单模式与YUI Compressor一样可靠。我喂它没有任何问题。
  • 高级“编译”模式对于某些脚本来说非常有用,但是脚本的大幅减少是以牺牲大量干扰您的代码为代价的。有ways to deal with some of these problems并了解它正在做什么可以大大有助于避免问题,但我通常避免使用这种模式。

我已经转而使用Google Closure Compiler进行简单的“编译”模式,因为它的性能略高于YUI Compressor。我使用它比使用YUI Compressor要少得多,但是到目前为止我已经推荐了它。

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

答案 1 :(得分:33)

我使用YUI Compressor。似乎能很好地完成工作!

答案 2 :(得分:22)

你有一堆可能性:

根据我的个人经验,我建议您使用Dojo SDK构建自定义构建,然后您可以配置为使用其通常的ShrinkSafe编译器或Google Closure,which they now support as well。< / p>

就压缩而言,我认为Google Closure是迄今为止产生最佳效果的产品,但我对ShrinkSafe感到满意,它有点老了,而且更强大,而Closure Compiler看起来有点像个新手在块(例如,您的利益相关者可能不太喜欢)。

但是有些人只对YUI Compressor发誓。我个人不能保证它。

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

您也可以在此主题中找到其他主题,并在工具的支持文档中查找信息。 您可能还想查看JSBuilder2,这是对Dojo的Build工具(使用ShrinkSafe或Closure Compiler)的一些吊坠,用于ExtJS(使用YUI压缩器)。

(抱歉,作为新的SO用户,我无法添加多个链接,因此无法直接链接到这些工具。)

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

  • 如果使用minifier,即使激活了gzip压缩,你的带宽也会得到非常显着的改善(你可以通过让压缩器的生活更轻松来学习利用gzip压缩)
  • 您应该在调试和生产模式下品尝您的代码,以确保行为完全相同。我的意思是,这也是你工作的一部分......
  • 其中一些压缩器已存在一段时间,并不会真正在您的代码中引入错误。他们真的只是重新组织事物并取代字符串,真的。
  • 一些压缩器(例如dojo构建系统)提供了允许您生成压缩和未压缩输出的选项,以便您可以使用查询参数启用不同的调试和生成模式。

答案 3 :(得分:12)

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

答案 4 :(得分:11)

我也使用YUI Compressor。我有一个这样的蚂蚁任务,我在我的项目中使用:

<!--
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>

答案 5 :(得分:5)

Dean Edward's packer实现了一些非常好的压缩率。它具有命令行实现,允许它在持续集成过程中使用。

答案 6 :(得分:5)

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

答案 7 :(得分:4)

Google的closure工具

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

答案 8 :(得分:3)

以下是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文件将被缩小(请参阅“排除”属性以排除其他文件被缩小)。

答案 9 :(得分:3)

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

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

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

答案 10 :(得分:1)

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

好老Doug Crockford :-)这样做的好处在于,通过缓存控制,只有在需要时才能获得一些自动压缩。或者在我的一个项目中,我只输出压缩/ gzip文件,并在进行更改时删除它们。对于开发环境,我只是不称之为缩小脚本。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

这篇文章描述了如何使用YUI Compressor在构建期间最小化文件:Compressing JS files as part of your build process

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

http://javascriptcompressor.com/

如果你想要更加复杂,你也可以缩小变量。

希望有所帮助