【问题标题】:What do you use to minimize and compress JavaScript libraries? [closed]你用什么来最小化和压缩 JavaScript 库? [关闭]
【发布时间】:2010-10-10 15:19:14
【问题描述】:

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

【问题讨论】:

  • 开始赏金,看看自 2009 年以来是否有任何新进展。
  • 问题的措辞方式,应该是社区维基。任何人都可以回答这个问题(即使答案是“无”),而且不能有任何错误的答案......

标签: javascript compression minimize jscompress


【解决方案1】:

我已经使用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

【讨论】:

  • Google Closure Compiler 是我绝对推荐的。像你一样 - 简单模式刚刚奏效......完全没有问题。
【解决方案2】:

我使用YUI Compressor。似乎把工作做好了!

【讨论】:

  • 根据我的经验,YUI Compressor 是最安全,但也最激进的压缩器。
  • YUIcompressor 有一些不好的副作用。它附带了一个损坏的 Rhino 版本,该版本会破坏任何带有 Rhino 的服务器端 javascript。
  • 如果你愿意,也可以添加一个指向这个在线版本的链接,有时我只有一个文件,我很快就想转换。 refresh-sf.com/yui
【解决方案3】:

这里有很多可能性:

根据我的个人经验,我建议您使用 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 用户,我无法添加多个链接,因此无法直接链接到工具。)

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • +1 最小化更改代码并可能引入错误。
    • 当然,但它仍然提供了一些额外的好处,而不仅仅是 gzipping。只需确保使用缩小版进行所有测试即可。
    • 那些有防病毒保护或出于其他原因阻止 enableGzip 的用户怎么办?
    • 当然,当我们查看 24kb 压缩和 155kb 未压缩的 jquery 时,您加载文件的速度快了五倍,这是一个非常棒的比率。当我 gzip 下载未压缩的文件时,我们得到一个 48kb 的文件,而当我下载 gzip 压缩文件时,它仍然是 24kb(显然)。在我们说它并不重要之前,我们应该考虑文件的大小以及它对速度的要求。对于 jQuery 来说,它是一个相对较大的库,一心追求速度,即使 gzip 只有两倍大,尽可能地缩小它也很重要。
    【解决方案5】:

    我也使用 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>
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • 由于在浏览器中解包的开销,加壳器已被证明比常规压缩更差。
      【解决方案7】:

      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

      【讨论】:

        【解决方案8】:

        Google 的 closure 工具

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

        【讨论】:

          【解决方案9】:

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

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

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

          【讨论】:

          • Douglas Crockford 是雅虎的 Javascript 架构师。我认为他是 YUI 压缩器的架构师。
          • 没有。 Doug 为 Yahoo 工作,但他是 JSMin 的创建者。 YUI 压缩器由 Julien Lecomte 创建。它是用 Java 编写的 - 我认为 Doug 不会再回到编写 Java 了 :)
          【解决方案10】:

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

          安装:

          http://aspnet.codeplex.com/releases/view/40584下载msi

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

          使用方法:

          编辑您的 .csproj 文件并在文件末尾包含以下内容(但在 &lt;/Project&gt; 标记之前):

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

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

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

                    【讨论】:

                      【解决方案16】:

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

                      【讨论】:

                        【解决方案17】:

                        有一个很好的在线压缩器:

                        http://javascriptcompressor.com/

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

                        希望对你有帮助

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2010-12-11
                          • 2010-09-06
                          • 2012-03-08
                          • 2019-11-03
                          • 1970-01-01
                          • 2012-01-29
                          • 2010-09-25
                          相关资源
                          最近更新 更多