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

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

我使用YUI压缩机 。 似乎完成了这项工作!

我已经使用了YUI Compressor很长一段时间,并没有问题,但最近开始使用谷歌闭合编译器,并取得了一些成功。 我迄今为止的印象:

  • 就文件大小的减less而言,它通常优于YUI压缩器。 在简单模式下,通过高级模式上的很多。
  • 迄今为止,简单模式与YUI压缩机一样可靠。 没有我喂它已经显示出任何问题。
  • 先进的“编译”模式对于某些脚本来说是非常棒的,但是脚本的大幅度缩减会牺牲很多干扰您的代码的能力,而这些代码很可能会被破坏。 有些方法可以解决这些问题 ,理解它所做的工作可以大大地避免问题,但我通常避免使用这种模式。

我已经转向使用Google Closure Compiler以简单的“编译”模式,因为它略微优于YUI Compressor。 我使用它比我有YUI压缩机less得多,但从迄今为止我所看到的,我会推荐它。

另一个我还没有尝试,但听起来很有希望的是Mihai Bazon的UglifyJS 。

你在这里有一大堆的可能性:

  • YUI压缩机提到的其他答案,
  • Google Closure编译器 ,
  • Dojo ToolKit的构build 系统使用的ShrinkSafe编译器,
  • 道格拉斯· 克罗克福德仍然是实际的JSMin ,
  • UglifyJS被别人提到,
  • 而一个商业解决scheme, javaScript混淆器 (从未亲自使用过)

根据我个人的经验,我build议您使用Dojo SDK构build一个自定义构build,然后您可以configuration为使用他们现在支持的通常的ShrinkSafe编译器或Google Closure。

在压缩方面,我认为到目前为止,Google Closure对我来说是最好的结果,但是我通常对ShrinkSafe感到满意,而且它的年龄越来越大,而且越来越强大,而Closure Compiler在这个块上看起来有点新鲜(例如,您的利益相关者可能不太喜欢)。

不过,有些人只能通过YUI压缩机发誓。 我个人不能真的担保。

现在,如果你的问题是压缩库,而不是只是你自己的JavaScript代码,它显然变得更加涉及,因为这些工具大多需要导出不应该被重命名或剥离的符号。 大多数体面的压缩机将删除他们认为未被使用的function – 通常情况下,如果不是绑定到某个项目,通常情况下是在图书馆中,并且改变名称使其缩短并使用较less的字符,这也是一个显而易见的问题API不被篡改。

您也可以在此主题上find其他主题,并在工具的支持文档中find相关信息。 您可能还想看看JSBuilder2 ,它是Dojo构build工具的一种挂件(所以使用ShrinkSafe或Closure编译器)用于ExtJS(使用YUI压缩器)。

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

编辑:关于在一些答案中expression的担心,压缩可能会引入错误,并且它使得debugging更容易,因为代码没有损坏:是的,这是一个有效的关注。 然而:

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

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

我也使用YUI压缩机。 我在我的项目中使用了这样一个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> 

UglifyJS是一个新的。

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

另外,由UglifyJS生成的代码比Closure生成的代码更安全。 例如,Closure不知道如何处理eval或用{} – 它只logging一个错误,并继续重命名variables。 这显然会导致代码被破坏。 UglifyJS没有这个问题。

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

Dean Edward的封隔器达到了一些非常好的压缩比。 它具有命令行实现,允许它在持续集成过程中使用。

Google的closures工具

您可以将缩小版本映射到常规源代码,以便在Firebug中使用它们的附件进行debugging。

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

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

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

下面是来自Microsoft的一个解决scheme,您可以将其集成到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> 

现在,当您构build项目时,不会以.min.js,.min.css结尾的所有CSS和js文件将被缩小(请参阅“排除”属性以排除其他文件的缩小)。

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

好的老道格·克罗克福德:-)这样做的好处是,通过caching控制,只有在需要的时候才能获得一些很好的自动压缩。 或者在我的一个项目中,我只是输出压缩/ gzip文件,并删除它们,当我做出改变。 对于开发环境,我只是不叫“缩小脚本”。

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

这篇文章描述了如何使用YUI Compressor在构build过程中最小化文件: 压缩JS文件作为构build过程的一部分

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

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

http://javascriptcompressor.com/

你也可以缩小variables,如果你想更多的compresed。

希望它有帮助