【问题标题】:How does yui-compressor that compresses javascript and css files work?压缩 javascript 和 css 文件的 yui-compressor 是如何工作的?
【发布时间】:2012-11-16 15:50:49
【问题描述】:

我很想了解像 yui-compressor 这样的压缩器在压缩 js 或 css 文件时所做的一切,如果我想编写自己的压缩器,我需要采取哪些步骤。

【问题讨论】:

    标签: javascript css yui-compressor


    【解决方案1】:

    YUI 压缩器是用 Java 编写的(需要 Java >= 1.4)并且 依赖 Rhino 来标记源 JavaScript 文件。它开始于 分析源 JavaScript 文件以了解其内容 结构化的。然后它打印出令牌流,省略尽可能多的 尽可能使用空格字符,并将所有本地符号替换为 一个 1(或 2,或 3)个字母符号,只要有这样的替换 适当的(面对诸如 eval 或 with 之类的邪恶特征, YUI Compressor 通过不混淆任何 包含 evil 语句的范围)CSS 压缩 算法使用一组微调的正则表达式来压缩 源 CSS 文件。 YUI Compressor 是开源的,所以不要 犹豫查看代码以了解其工作原理。

    来源:http://developer.yahoo.com/yui/compressor/#work

    【讨论】:

      【解决方案2】:

      来自官方文档网站

      " YUI 压缩器是如何工作的? YUI 压缩器是用 Java 编写的(需要 Java >= 1.4)并依赖 Rhino 来标记源 JavaScript 文件。它首先分析源 JavaScript 文件以了解其结构。然后它打印出令牌流,尽可能多地省略空白字符,并在适当的替换处用 1(或 2 或 3)字母符号替换所有本地符号(面对诸如 eval 之类的邪恶功能或者,YUI Compressor 采取防御方法,不混淆任何包含 evil 语句的作用域) CSS 压缩算法使用一组经过微调的正则表达式来压缩源 CSS 文件。 YUI Compressor 是开源的,因此请不要犹豫,查看代码以了解其工作原理。”

      这里是css压缩代码 https://github.com/yui/yuicompressor/blob/master/src/com/yahoo/platform/yui/compressor/CssCompressor.java

      这里是js压缩代码 https://github.com/yui/yuicompressor/blob/master/src/com/yahoo/platform/yui/compressor/JavaScriptCompressor.java

      【讨论】:

      • Js 压缩内部 1) 读取源文件 2) 发出空格并构建符号树。 3)现在 munge(替换字符)符号。避免 evals 和未命名的 un-namepspaced 全局变量。
      • 对于你的回答,我其实没有理解符号树的含义。符号是什么意思
      【解决方案3】:

      据我所知,这些是主要步骤:

      • 删除所有多余的空格(解析器不需要它们)
      • 删除回车(解析器也不需要)

      对于 JS

      • 用更短的新变量名称替换变量名称,当然是唯一的

      编辑:最简单的方法就是创建一个 CSS 和 JS 并在压缩后查看差异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        • 1970-01-01
        • 2012-08-03
        • 2011-02-09
        • 1970-01-01
        相关资源
        最近更新 更多