I am trying to get myself acquainted with the world of rich web application. There are some comparison tables of available technologies on the Wikipedia, but I still find it unclear what are the options for rich application development.
Could you please verify and complete the information I gathered below? What are the key pros and cons of each option? Which is the best choice for big and very rich web application?
Option 1: ASP.NET/ASP.NET MVC
Vendor: Microsoft
Environment: Visual Studio
Language: C#
Output: HTML+JavaScript+AJAX
Example: www.stackoverflow.com
Option 2: Silverlight
Vendor: Microsoft
Environment: Visual Studio
Language: C#
Output: .NET executable?
Example: ?
Option 3: Google Web Toolkit
Vendor: Google
Environment: Eclipse
Language: Java
Output: HTML+JavaScript+AJAX
Example: http://www.projectkaiser.com:8080/pk/
Option 4: Flex
Vendor: Adobe
Environment: ?
Language: ?
Output: Flash (.swf file)
Example: http://listen.grooveshark.com/
Option 5: Adobe AIR
Vendor: Adobe
Environment: ?
Language: ?
Output: AIR
Example: http://www.colabolo.com/en/download.html
Option 5: Ruby on Rails
Vendor: Rails Core Team
Envirnoment: ?
Language: Ruby
Output: HTML+JavaScript+AJAX?
Example: ?
Option 6: Java Applets
Vendor: Sun
Environment: Eclipse
Language: Java
Output: Java Applet
Option 7: OpenLeszlo
Vendor: ?
Environment: ?
Language: ?
Output: ?
Example: ?
Option 8: Vexi
Vendor: Vexi core team
Environment: Eclipse
Language: XML + JavaScript
Output: Java
Example: Demo on http://vexi.sourceforge.net/
Option 9: Django
Vendor: Django core team
Environment: ?
Language: Python
Output: HTML + JavaScript + AJAX
Example: ?
Option 10: XUL
???
I think Web development is becoming more complex with each year (multiple platforms and devices, more capable devices). As this happens, the software layers are becoming more and more defined and more complex. Integration and independence among among those layers is becoming of prime importance if you're looking long term. You can't rely on building the solution in just one technology anymore. So I'd look at open systems/standards like Web 2, 3, etc.
I totally agree with Peter Gwiazda so I can not say anything more about that section as he covered them all. What I want to add is some other specs. First clear in your mind what you wish to accomplish with it. What is the app you wish to develop? Also search in what os you wish that app to run. Then you will decide of what type of language/framework you wish to develop the app. Clear your target, analyze what framework will be better to develop (based on demand in my opinion) and then go and learn. You can not learn them all at once! Every language/platform has it pros and cons so you will decide what suits you more!
Sencha Ext JS is a powerful front-end library for providing desktop-like experience in the browser. Pros: consistent look, powerful architecture (prototype-based OOP), a lot of widgets. Cons: in most cases not free.
If you choose to stick with modular approach (which is advisable for complex data-rich web apps with hundreds of models), and want to use Ruby on the back-end, check out Netzke: https://github.com/nomadcoder/netzke-core.
You have mixed it all up. You have two layers here : user interface which makes the app "rich", and server-side code.
UI:
Silverlight
Works best with .NET platform. I wouldn't consider to join it with Java, Ruby on Rails, PHP or something.
Tools are commercial.
Flash/Flex (Flash Platform)
My favorite and I think the most mature one from the list (I's my subjective opinion as I work as Flex/Java developer). Works with all server side technologies using simple Http service, WebService byt the best integration is by AMF services (efficent binary protocol). Integration is on different levels. Basic remote calls (it's enough for 90% projects) are availibe for all platforms (.NET, Java EE, PHP, RoR). but there are library for hi-level interation (data synchronization, data push, client-server events or even client-server depndency injection) for Java EE : Adobe Livecycle Data Services (commercial) or GraniteDS and Tide Framework (free, works wich JBoss Seam).
Flex SDK (compiler and lib) is free, but FlexBuilder is commercial.
OpenLaszlo
There are two options - live "compilation" to flash or html+javascript on OpenLaszlo server, or developement-time compilation to flash and upload to http server. Integrates with most server-side technologies. The idea is similiar to flex but was first.
SDK is free, IDE is rather poor.
JavaFX / Java Applet
It's rather experimental, graphical tools and IDE are poor. the idea is to declaratively (but not XML) code swing interface and run it as applet. I think id doesn't have production status.
Flash/Flex and Silverlight gives you the most advanced tools to create rich user experience interface with multimedia (video/audio streaming, usage of webcam, microphone etc).
Adobe AIR
AIR stands for Adobe Integrated Runtime which let's you run Flex or HTML+Javascript applications on your desktop (works similiar to java Virtual Machine + WebStart). For flex applications integrations with remote systems are the same as above. AIR application is installed on client machine like and runs like any app. You have access to filesystem too. AIR runs on Windows, Mac and Linux/BSD too (I think).
Server Side:
Java
It is : Java EE 5 (now Java EE 6), or simple Web application without application container. You can have some javascript based rich UI like Google Web Toolkit, JBoss RichFaces, IceFaces and some commercial stuff.
Integrates good with Flex interface with integration frameworks - Adobe LiveCycle ... (commercial), BlazeDS (simple, free), GraniteDS + Tide + Gravity (advanced, free) , WebOrb and others You can have application framework here : Spring (2 or 3), JBoss Seam and lots ...
.NET
I'm not an expert here. Gives you opportunities for JS rich interface. integrates with Silverlight and Flex (WebOrb, .NET and AMF).
There are lots of other technologies there. Some of them has their own rich UI's, some of them not. Most of them integrates with Flex
PHP
Rich UI with Prado application framework. There are some simpler PHP frameworks (ask google). Flex integration with AmfPHP, WebOrb, SabreAMF
Ruby on Rails
Language + Server + App framework. Can integrate with Flex
Python
There are some app frameworks : Django, Pylons... Can integrate with Flex
Scala + Lift
Lift is an app framework written in scala. Runs on java server.
Coldfusion
An Adobe technology. The language is CFML. Runs on Adobe Coldfusion server but tere is free Railo from JBoss. Integrates with Flex.
My five cents
ASP.NET - forget it. Obsolete past millenium technology.
Silverlight pros - very power commercial libraries available. If "wow" effect is a must then it is your choice, though you should spend some money to buy 3d parties software.
E.g. look at
sirius2 . intersoftpt . com
demos . telerik . com / silverlight / salesdashboard /
Silverlight cons: browser must have silverlight plugin installed, this plugin should be upgraded time-to-time when new silverlight version is released and used in your software , sometimes there is a problem upgrading this plugin. Also not sure that this plugin is fully available for *nux operating systems - so potentially you can stick to Windows.
GWT pros: no plugin needed, you develop using Java and Java is compiled into pure javascript. My favorite tool to build effective applications e.g. http://www.projectkaiser.com
GWT cons: poor GUI libraries ( even if we talk about commercial libraries )
Java Applets. You can look at pivot . apache . org
So my answer to "Which is the best choice for big and very rich web application" is Silverlight. Take care about cons though !
If you're talking about building a web application with rich interactive features on the client, there are 3 mainstream options:
For my money, HTML is far and away the most interesting platform. It has the most activity and is rapidly becoming more standardized across browsers. HTML5 adds support for features like local storage and background processing. Google Chrome now even has a 3D graphics library (WebGL) - Firefox soon to come.
If I were you, I'd be focusing on learning the HTML(5) stack - HTML, CSS, CSS3, HTML5, jQuery, and looking at open source frameworks like backbone.js, jQuery mobile, JQTouch, angular.js, etc. I follow many of these projects on GitHub - you can see the larger list here:
https://github.com/mckoss/following
Your rich web app likely needs some sort of server-side infrastructure to support it. Ruby on Rails is probably the most popular framework and super easy to get started. Heroku can host your app for you very easily and in a scalable manner.
If you have a lot of Java code already (I'm not a Java fan, myself) - Google's GWT is a very nice framework for building apps in pure Java, and it cross-compiles the client-side bits to JavaScript.
I personally like Python on the server side - Google App Engine provides a very nice option that is scalable and simple to program against (using the Django framework on Google App Engine is the best option here for non-trivial apps).
And, if I might suggest something new that I've been working on - Pageforest.com provides a pure JavaScript web-app platform. You write ALL your code in client-side JavaScript, and use AJAX/REST to sign-in users and save data to the Pageforest server (this service is open and free for developers).
Good luck!