`
yiminghe
  • 浏览: 1465421 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

应用 closure compiler 高级模式

阅读更多

基础:


closure compiler (简记CC)是 google 去年推出的一款 javascript 压缩工具,取得了比老牌压缩工具 yui compressor (简记YC) 更高的压缩比,CC 相对于 YC 具备更多的语义分析 能力, 根据参数具备三个等级的压缩代码能力


white-space-only : 只去除源码中的空格


simple-optimization : 对应于 YC 能力,对局部变量名字进行缩短。


advanced-optimization : CC 独有,这个等级会进行函数内联 ,变(常)量提取,执行流程优化等传统编译器前端所做的事情,而对于 javascript ,则会进行激进的属性名缩短,以及对象平坦化操作。这也是导致使用该级优化较少的主要原因。


具体 CC 与 YC 比较 可以见: YC VS CC By Lifesinger

 


实践:

 

近期整理 kissy editor 的核心代码,使用 CC 的高级模式编译后,比起简单模式效果显著:

 

 

 

高级模式 比起简单模式节省了17k,17.5% !


当然使用 CC 的高级模式是需要对代码进行一些调整的


1.尽可能多标注


由于 javascript 是一种弱类型语言,而CC 要全面优化的话不可避免需要知道一些类型信息,这些信息就只能通过标注(annotation)来传递给 CC,可以通过 @constructor 标志构造器,@type 标志变量类型,@param,@return 标志函数相关等等。



2.区分对象属性引用方式


javascript 对象属性有两种引用方式 : obj.propertyName 与 obj["propertyName "] ,语言规范来说是没有区别,但是 CC 在优化过程中会对 obj.propertyName 进行 变量名以及属性名缩短,例如:


obj.propertyName -> x.a


这样的话,当需要保持属性名不变,例如(外部引用或配置传入,读取),则要谨慎选择。


使用 obj["propertyName "] 也是 CC 推荐的暴露 (export) 外部api的方法 ,将实例以及构造器上的静态方法开放给外部程序调用。

 

Constructor["api"]=Constructor.api;
Constructor.prototype["api"]=Constructor.prototype.api;

 

也可参考CC建议 ,写个工具方法 extern :

 

/**
 * extern for closure compiler
 */

function extern(obj, cfg) {
    for (var i in cfg) {
        obj[i] = cfg[i];
    }
}


extern(Constructor, {
    "api1": Constructor.api,
    "api2": Constructor.ap2
})

 

 

 

 

3.申明外部类库


CC 推荐类库与应用整体编译,但是现实中往往可能类库本身都不能与 CC 兼容,这时就需要使用类似 C 头文件的类库申明文件,来告诉 CC 使用的类库api,防止对调用类库的代码进行优化。


例如:可以提供 kissy 的类库声明文件 kissy.js ,使用时,命令行加入 --externs kissy.js

 

var KISSY={
    augment:function(){},
    merge:function(){},
    extend:function(){},
    namespace:function(){},
    guid:function(){},
    one:function(){},
    all:function(){},
    log:function(){},
    trim:function(){},
.......
 

而这也是 CC 避免对浏览器以及语言级 api 优化的重要措施,例如 语言规范 api 声明浏览器 api 声明 .....

 

 

 

原理与优化流程:


占位!希望能读懂CC 源码



总结:


使用 CC 的好处显而易见,不仅压缩了代码大小,而且同时CC会做多种已被证实的最佳优化,可减少后期手工优化的繁琐,但是不便之处也很明显,代码必须根据 CC 的需求重新整理,明显的:禁用 with,eval ,不明显的:区分属性访问以及申明外部类库,并且要时刻注意自己导出的外部应用接口。


 

 

 

 

 

 

 

 

  • 大小: 9.5 KB
分享到:
评论
2 楼 yiminghe 2011-02-18  
qzlake 写道
lz准备研究closure compiler代码?

大概看了下,勉强会用
1 楼 qzlake 2011-02-17  
lz准备研究closure compiler代码?

相关推荐

    对JavaScript应用编译技术.pdf

    与其他JavaScript压缩工具不同,Closure Compiler可以检查JavaScript代码中的语法错误和语义错误,并提供了多种优化方式。Closure Compiler也可以输出“Parse Tree”,使得开发者可以更好地理解代码的结构。 ...

    Closure: The Definitive Guide

    而使用Closure Compiler这样的工具,可以通过高级优化模式减少代码大小,提高执行效率,同时维持代码的可读性和可维护性。 在使用这些工具的过程中,了解它们的设计目标和原理是十分重要的。例如,了解Closure ...

    6.4高级编译1

    总结来说,"6.4高级编译1" 提供了一种优化Blockly项目的方法,通过使用Closure Compiler的高级编译模式,可以显著地减少JavaScript代码的大小和复杂性,这对于提升Web应用的性能和用户体验至关重要。在实际开发中,...

    google的压缩JS工具

    Closure Compiler有两种主要的运行模式:简单模式(Simple)和高级模式(Advanced)。简单模式主要进行基本的语法压缩,如删除注释和空格,以及转换常量变量。而高级模式则更为激进,它会分析代码的控制流和数据依赖...

    appfuse-service-3.0.0.zip

    Closure Compiler是一款高级JavaScript编译器,由Google开发。它不仅仅是简单的语法压缩,而是对代码进行深度优化,包括变量和函数的重命名、删除未使用的代码、类型检查等,从而显著减少文件大小,提高加载速度,并...

    Angular挣脱舒适区的枷锁.pptx

    为了进一步优化应用,可以使用 Closure Compiler 的 Advanced 模式。这个模式能对 JavaScript 代码进行更深度的压缩和优化,但需要确保代码符合一定的规范。在 Angular 应用中结合 AOT 编译,Closure Compiler 可以...

    IntegrationCompilerJS:Project API CompileJS使用Google的Closure编译器

    Closure编译器是一个静态类型检查器和代码优化器,主要由三部分组成:Simple Compiler(简单编译器)、Advanced Compiler(高级编译器)和Closure Library。其中,Simple Compiler主要负责基础的压缩和混淆,而...

    Javascript加密混淆

    - **混淆工具**:如UglifyJS、Closure Compiler等,可自动进行混淆操作。 3. **加密混淆的组合应用**: - 通常,开发者会先加密敏感代码,再进行混淆处理,以双重保护代码。 - 加密后的代码在运行时需要解密,这...

    js 混淆器 很好的东西

    1. 选择合适的混淆器:市面上有许多开源和商业的JavaScript混淆器,例如UglifyJS、Closure Compiler、Terser等,每种混淆器都有其特点和适用场景。 2. 配置混淆选项:根据项目需求,设置混淆策略、保留的变量名、...

    JavaScript 代码压缩工具小结

    谷歌 Closure Compiler提供了多种压缩模式,包括简单压缩和高级压缩等。 4. YUI Compressor YUI Compressor是由Yahoo! UI团队开发的代码压缩工具,它支持JavaScript和CSS代码压缩,并且需要Java运行环境。从官方...

    JS压缩工具

    - **Google Closure Compiler**:谷歌提供的压缩工具,可以处理复杂的JavaScript代码,提供高级优化功能。 - **Terser**:源自知名的uglify-js项目,专注于ES6+语法的支持和优化。 **自动化构建流程** 在实际开发中...

    js代码精简

    例如,使用YUI Compressor或Google Closure Compiler的高级模式,它们不仅可以压缩代码,还可以进行混淆操作。 3. **模块打包**:在现代Web开发中,JavaScript代码经常使用模块化系统(如CommonJS、ES6模块等)。...

    js压缩工具

    3. Closure Compiler:Google提供的高级JS编译器,除了基本的压缩外,还能进行类型检查和代码优化。 4. Babel:虽然主要用作转译ES6+到ES5,但配合@babel/preset-env和@babel/plugin-transform-minify插件,也可以...

    Js、Css压缩(可批量)

    常见的Js压缩工具有UglifyJS、Terser和Google的Closure Compiler。这些工具能够自动处理变量名混淆、删除未使用的变量和函数,以及合并单行语句等,进一步减小文件体积。对于批量处理多个Js文件,可以通过编写脚本...

    JavaScript-Minify-Pack-源码.rar

    - **Closure Compiler**:Google 提供的JavaScript编译器,提供高级优化,能进行更深度的代码分析和压缩。 - **Webpack** 和 **Rollup** 这类模块打包工具,内置或配合插件实现代码压缩功能。 - **Gulp** 和 **...

    JS代码压缩工具

    - **Closure Compiler**:由Google开发,具有高级优化模式,能进行更深入的代码分析和压缩。 - **Terser**:原名uglify-es,是UglifyJS的ES6版本,支持最新的JavaScript特性。 - **Webpack** 和 **Gulp**:这些是...

    编写可维护的JavaScript(中文)

    17.1.2 用Closure Compiler精简 17.1.3 使用UglifyJS精简 17.2 压缩 17.2.1 运行时压缩 17.2.2 构建时压缩 第18章 文档化 18.1 JSDoc Toolkit 18.2 YUI Doc 第19章 自动化测试 19.1 YUI Test Selenium引擎...

    程序员需要知道的16件事

    10. **JavaScript压缩**:使用Google Closure Compiler或YUI Compressor等工具来压缩JavaScript文件,减少文件大小。 11. **Favicon优化**:确保网站根目录下存在favicon.ico文件,避免404错误导致额外的网络请求。...

Global site tag (gtag.js) - Google Analytics