The Grand Cloud

The Grand Cloud

Mar 11 / 8:47pm

Speeding up compilation of large Flex 3 applications

Joa Ebert posted a very interesting blog post about Compiling ActionScript in The Enterprise and I thought it would be interesting to explain what I did a while ago as part of the Anvil Flex Open Source Project to speed up compiling Flex 3 applications.   I should say we, because I had a lot of help from James Ward in building this.  Anvil Flex was desinged somewhat like a portal server and the application was then broken down into smaller sub-applications or "modules" (in the orginizational context and not the flex context).   Each module was designed so the it could be compiled and tested in a stand alone context.  There was also several common libraries that where shared with the entire application

About 6 months into this project compile times for the entire application where exceding 20 minutes and it was nearly impossible to do continuous integration.  One of the main problems with the flex compilers is each part of the compilation process (mxmlc, compc, opimizer, etc.) requires you to start a separate JVM, compile that small part of code and then shutdown the JVM.  Not only does starting and stoping the JVM take time, you also lose all the compilation information when you shut down. 

To solve this problem we build a custom Java compilation program called Taz that called directly into the Flex compiler classes, since the Flex compiler is written in Java.  It consited of the following steps:

1 - We designed a heirarchial build system in Ant that would allow you to build any part of the tree and it's descendets automatically.

2 - The common libraries and modules each had there own Ant build files that described their dependecies.

3 - On building the application we would first walk the tree and build a dependcy heirarchy in memory of what modules and libraries need to be built.

4 - Then as we compiled each library we would cache any pre-processing and loaded libraries that could be reused throughout the compilation process.

The result was compile times dropped from 20 plus minutes to around 4 minutes!    Then for continuous integration builds we set-up multiple builds that would first compile the individual modules and common libraries and then build the entire application.  This would prevent a single module from breaking the build of all the other modules.

A very interesting and logic next step would be to take this process and allow the compilation process on individual developers machines to use the latest libraries built remotely.  For example if a developer was working on module A that depended on module B they could specify to grab latest pre-built module B and any common libraries off a remote machine, like the last known good build from the continuous integration server.  You could also distribute the build across machines this way.

A final note,  a lot of people don't like Ant and say Maven is the build system of the future.  Acutally part of the reason I stop working on Anvil is the entire build process was in Ant and I also thought the trend was to using Maven for builds.  Then on my last project we used Maven extensively and I know believe that Ant actually might be better solution for compiling large and complicated Flex Applications.  One of the reasons I didn't like the Maven build system was a large part of our build process actually used Ant behind the scenes for everything that could not be easily done in Maven.  Yes, Flex Mojos and such can help compile a fairly standard Flex project, but when you project reaches a certain point of complexity that starts to fall apart.  Things such as bundling custom resource files, including special assets in the final build, linking common library files, etc.  it gets complicated really fast! 

I had previously said that the Anvil Flex project was dead, but the code lives on in sourceforge. If there is any interested this build process could be extracted out into a separate, stand alone project.

 

Filed under  //  actionscript   anvil   flex  

Comments (2)

Jul 21 / 8:03am

Hey Adobe! What about us Flex developers?

Having developed Flex for several years now I am getting really tired of Adobe's lack of support for developers. I was hoping they would bring at least modest improvements to Flex Builder (now Flash Builder) 4, but it is not much better. Re-factoring support is almost non-existent, something I consider fundamental to the development process. Even simple renaming and moving of classes and variables doesn't work properly.  Code Formatting is still missing.   And why can they still not get proper code navigation?  What I mean is why can you only navigate up the class hierarchy and not down? The most painful part of the development experience for me is how slow visual design is. The visual editor is useless.  So all layout has to be done by hand.  But even making a single change to the layout of a component, it re-compiles the entire project. And there seem to be an endless amount of bugs.  For example we recently found you can not have multiple projects that use locales.  Or odd behavior, like changing the server side support in project properties messes up the entire project. If I where to choose a new UI framework today I would have to seriously re-consider whether to use Flex. I would want to look at the entire development eco-system around alternatives.  I think this is where JavaFX might be able to take the lead.  It all depends on what Oracle does with NetBeans and JavaFX of course, but we can always hope.
Filed under  //  flash builder   flex  

Comments (0)

Feb 23 / 2:28pm

End of Life for Anvil Flex

I have decided to stop development on anvil flex.  It had a good 2 year run, but it's sorely out of date.  Mostly it has been replaced by other frameworks.  Flex has made dramatic changes in the past several years and made a lot of anvil out of date.  The Spring BlazeDS project provides much better back-end support and integration.  On the Flex side the biggest downside is most of the data is passed using custom events.  Today I would rewrite this using something like Swiz. It has been really interesting developing anvil flex and I have learned a lot.  Probably the biggest lesson is how hard it is to keep an open source project up to date.  It gives you a much deeper appreciation for major open source projects and the amount of commitment it takes. Some parts of anvil flex are still useful.  It allows dynamically loading and managing modules.  It also has a unique portal framework.  The code will remain available on sourceforge and provides some good sample projects.
Filed under  //  anvil   flex  

Comments (0)

Ryan Knight  //  Ryan Knight is a Senior Flex and Java consult with 14 years of experience in all aspects of technology.