I finally got my app to compile a release version by eliminating my circular 
dependencies. So far so good.

FYI, I fixed this by doing two things: 1. I added a className property and 
instead of doing if(this is Sub), I’m using if(this.className == “Sub”). 2. I 
enabled -js-output-optimization=skipAsCoercions (two of my circulars were due 
to an “as” statement which caused a circular dependency chain through a number 
of different classes).

I have some observations / problems with the optimizations for the release 
build:

1. It’s optimized to the point where it does not work. If I run MyApp.start() 
in index.html, I get an error that MyApp is not defined. Looking in the JS, I 
see that Em=‘MyApp’. Is there something special I need to do to prevent this 
from happening?

2. Prototype definitions are not being optimized as much as they could. The 
pattern is MyClass.prototype.foo = “some value”; for each one. If that’s 
replaced with MyClass.prototype = {foo:”somevalue”,…} It’ll save 
“MyClass.prototype” getting written for every property.

3. Static constants are not being optimized as much as they should. I’m not 
sure what’s responsible for this, but instead of literals or compact variables, 
it’s using the fully qualified static name every time.

4. Full class paths are not needed. The class paths could easily be shortened 
to a few unique characters for significant optimization. I just tried a search 
and replace on a 900KB file, and just replacing the package paths reduced the 
file size by 20KB.

There’s other optimizations which could probably be taken advantage of, but 
that’s my list for now.

Harbs

Reply via email to