Google Closure Compiler vs. YUI Compressor

38
Google Closure Compiler vs. YUI Compressor [email protected] 2009-11-09

description

Google Closure Compiler vs. YUI Compressor. [email protected] 2009-11-09. Who’s this guy?. http://lifesinger.org/. Players. GC = Google Closure Compiler. http://code.google.com/p/closure-compiler/. Players. YC = YUI Compressor. http://yuilibrary.com/downloads/#yuicompressor. - PowerPoint PPT Presentation

Transcript of Google Closure Compiler vs. YUI Compressor

Page 1: Google Closure Compiler  vs.  YUI Compressor

Google Closure Compiler vs.

YUI Compressor

[email protected]

Page 2: Google Closure Compiler  vs.  YUI Compressor

Who’s this guy?

http://lifesinger.org/

Page 3: Google Closure Compiler  vs.  YUI Compressor

Players

• GC = Google Closure Compiler

http://code.google.com/p/closure-compiler/

Page 4: Google Closure Compiler  vs.  YUI Compressor

Players

• YC = YUI Compressor

http://yuilibrary.com/downloads/#yuicompressor

Page 5: Google Closure Compiler  vs.  YUI Compressor

Optimization Levels

① Whitespace Level② Simple Optimizations③ Advanced

Optimizations

Page 6: Google Closure Compiler  vs.  YUI Compressor

Whitespace

Page 7: Google Closure Compiler  vs.  YUI Compressor

Whitespace Level

• Remove comments• Remove extra white space• Remove unneccessary semicolon

GC

YC

Page 8: Google Closure Compiler  vs.  YUI Compressor

Simple Optimizations

Page 9: Google Closure Compiler  vs.  YUI Compressor

Simple Optimizations

• var varName = “” var a = “”• object[“property”] object.property• {“key” : “val”} {key : “val”}• ‘xi\’an’ “xi’an”• “I am ” + “hot” “I am hot”

GC

YC

Page 10: Google Closure Compiler  vs.  YUI Compressor

Simple Optimizations

• a = new Object a = {}• a = new Array a = []• if(a) b() a && b()• if(a) b(); else c() a ? b() : c()• if(1) b(); else c() b()• return 2 * 3; return 6;• return undefined; return;• var f = function(){} function f(){}• var a; var b; var a, b;• … GC

YC

Page 11: Google Closure Compiler  vs.  YUI Compressor

Simple Optimizations

• Simple dead code removal

GC

YC

Page 12: Google Closure Compiler  vs.  YUI Compressor

Advanced Optimizations

Page 13: Google Closure Compiler  vs.  YUI Compressor

Advanced Optimizations

• Dead code removal & Function inlining

GC

YC

Page 14: Google Closure Compiler  vs.  YUI Compressor

Advanced Optimizations

• Aggressive renaming

GC

unsaf

e

Page 15: Google Closure Compiler  vs.  YUI Compressor

Advanced Optimizations

• More amazing but unsafe advanced optimizations:

http://code.google.com/closure/compiler/docs/api-tutorial3.html#better

Page 16: Google Closure Compiler  vs.  YUI Compressor

Whitespace Level

Simple Level Advanced Level

GC

YCBasic

Page 17: Google Closure Compiler  vs.  YUI Compressor

Helping Compressors

Page 18: Google Closure Compiler  vs.  YUI Compressor

Helping Compressors

① Use local variables to store:1. Repeated primitive values2. Global variables3. Object properties

Good practices for YC and GC

both.

Page 19: Google Closure Compiler  vs.  YUI Compressor

Helping Compressors

② Try to have only one var statement:

Good practice for YC.

Unneccessary for GC.

Page 20: Google Closure Compiler  vs.  YUI Compressor

Hurting Compressors

Page 21: Google Closure Compiler  vs.  YUI Compressor

Hurting Compressors

① eval() is Evil.

GC

YC

Page 22: Google Closure Compiler  vs.  YUI Compressor
Page 23: Google Closure Compiler  vs.  YUI Compressor

Hurting Compressors

② with statement considered harmful.

GC

YC

Page 24: Google Closure Compiler  vs.  YUI Compressor
Page 25: Google Closure Compiler  vs.  YUI Compressor

Hurting Compressors

③ Jscript conditional comments

Page 26: Google Closure Compiler  vs.  YUI Compressor

Hurting Compressors

Solutions: - Solution #1: Don’t use - Solution #2: See Solution #1

Page 27: Google Closure Compiler  vs.  YUI Compressor

Sugar

Page 28: Google Closure Compiler  vs.  YUI Compressor

Comments

• Preserve some comments:

YC

Page 30: Google Closure Compiler  vs.  YUI Compressor

File Combination

GC

java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js

Page 31: Google Closure Compiler  vs.  YUI Compressor

native2ascii

• GC works well for utf-8 encoding files.

• YC doesn’t have this feature.

Page 32: Google Closure Compiler  vs.  YUI Compressor

native2ascii

YC + native2ascii command script:

Page 33: Google Closure Compiler  vs.  YUI Compressor

native2ascii

GC script for GB18030 encoding files:

Suggest GC to support: --charset GB18030

Page 34: Google Closure Compiler  vs.  YUI Compressor

CSS Compression

• YC is good!• GC comes on!!!

Page 35: Google Closure Compiler  vs.  YUI Compressor

Compression Rates

Page 36: Google Closure Compiler  vs.  YUI Compressor

Summary

• YC is more reliable.

• GC is amazing, and almost safe at simple optimization level.

• GC is promising, but unsafe at advanced optimization level.

Page 38: Google Closure Compiler  vs.  YUI Compressor

Thanks!