Friday, August 07, 2009


I had an opportunity to look into Flex a few weeks back. I've been mostly focused on Swing last couple of years and before that was fairly involved with web development (pre-ajax). So it's been a nice exercise to investigate what it offers and compare and contrast.

Flex has a good out of the box widget set, similar to Swing. One of its major strengths is its UI designer - no real surprise there, given it grew out of flash. Actionscript, the ECMAScript compliant language, tries to be dynamic with optional static typing. This can be useful, especially during at development time with code completion. Debugging can be a challenge though, especially the mix between actionscript and mxml. End up falling back on Alerts which isn't the greatest thing (more so given that they don't block and you can end up with a flurry of alert boxes). I also found that there are multiple ways to do the same thing. This can be quite confusing especially when looking at samples on the web. You don't really know which is the best way or why. One other small thing - event names don't follow "on[event_name]" convention... it's very easy to confuse them with attributes in mxml. Overall, there's a big similarity with the html/js/css style of development - mxml/as/css.

Flex demos really well. For creating small simple apps involving fetching data from a remote data source and rendering it, it is probably unrivaled from a productivity perspective. Drag a datagrid onto the canvas, construct an http service and attach a result event handler to bind the result to the datagrid. Simple. Done. I think the 'Bindable' attribute is a big part of why Flex is so successful for these types of apps. It takes care of all that plumbing of syncing model with view. It's interesting to note that JavaFX has introduced the 'bind' keyword in JavaFX Script.

Most of what I've come across - articles/examples deal with small apps. I'm interested in how development in Flex would scale. It can be double edged sword. Given that it is so simple to just drag/drop and attach handlers, I would think it would require more discipline and good coding practices. It would be all too easy to keep doing this all over without really giving much thought to overall design and code hygiene. I don't particularly like the script tag in the MXML file. There should've been strict separation between the .mxml file and the .as file. I understand this was probably done to emulate the html/js model but why not force the separation as with separate .js files.

Running a fairly complicated app - like TourDeFlex which chronicles the wonders of the various flex widgets - sucks up a lot of resources. Usability suffers. The experience feels sluggish. A similarly "heavy" "ajaxy" app doesn't. What's worse is that on more than one occasion, the browser has crashed running that demo. It's no surprise I haven't seen full fledged flex apps out on the 'open web'. Enterprises can, and have, embraced it since they can dictate the environment.

There's a lot of revival in interest in web standards. Just as Adobe has AIR, Microsoft has Silverlight and Sun/Oracle has JavaFX, Google is embracing and evangelizing open web standards - HTML5/CSS/Javascript - as their RIA platform. GWT is the browser independent development platform with generated Javascript as the bytecode. I've started playing around with GWT recently and am quite impressed with its abilities - especially the development environment/cycle. Version 2.0 promises more useful features.

It'll be interesting to see where these platforms end up 3-4 years from now.


Anonymous said...

I am surprised at the lack of debugging tools. Can you verify? Gwt actually allows debugging in hosted mode (and plugin mode) in eclipse just like normal java apps.

One major advantage of flex is that you dont have to battle CSS. Nothing is more painful to me than having to figure out CSS on IE6 or the gazillion browsers.

On performance I do think there were articles with flash perf much higher than native Js as well.

Also do check out Adobe .Flex apps for Office, Photoshop and other things.


Mohnish Rao said...

Flex could very well have good debugging abilities, but for a new user it isn't very obvious. There is a 'trace' method, which is self-explanatory, but based on our setup, it turned out not to be very useful.

Battling the different CSS implementations is the price you have to pay sometimes when dealing with web standards. Btw, Flex also uses CSS to do skinning/styling. Course, you won't need to worry about browser incompatibility since you're dealing with only one runtime.

I have seen some perf statistics as well, but what does it mean exactly? And what is it comparing? Ex. perf for IE 6 vs Chrome 3 will be vastly different.