Comparing ASP.NET AJAX Frameworks

Daniel Zeiss, who is the man behind the ComfortASP.NET framework see http://www.comfortasp.de/ has published a very interesting comparison on his web site (http://www.daniel-zeiss.de/AJAXComparison/Results.htm) and his blog (http://www.geekswithblogs.com/danielz).

(Have you noticed that there are many German developers involved in AJAX engines and frameworks?)

I have also implemented the simple sample he uses for the comparison at http://www.mathertel.de/AJAXEngine/S02_AJAXCoreSamples/AJAXComparison.htm.

Here are my annotations and the testing-results that match for his table:

Version:03.01.2006
Autor:Matthias Hertel
Url:http://www.mathertel.de/AJAXEngine/
Versions:Free, licensed under a BSD style license. (http://www.mathertel.de/License.aspx)
Pricing: free
Supported ASP.NET Versions :2.0
Update granularity:Controls and direct Data
Update granularity direct AJAX :yes
Base Concepts:Using the standard WebServices, SOAP and WSDL and AJAX Action description for the client.
Browser Support :IE, Mozilla/Firefox
No manual deployment of separate script required:yes
HttpHander:yes, using the standard SOAP stack
HttpModule:yes, using the standard SOAP stack
Integration by page derivation:no
Framework specific feature configuration in web.config:no
minimal required code changes to the original Example:5 (onclick handler and the AJAX action)
Manager Control:-
Controls or declaration possibilities for additional AJAX features:yes
downgrade to pure ASP.NET:no
Turn AJAX on/off at design time:n/a
Turn AJAX on/off at runtime time: n/a
ASP.NET ViewState in AJAX postback: n/a
Visual Studio Designer Support:yes
Update Inline HTML: n/a
ASP.NET Event Handlers are called in AJAX postback: n/a
Correct handling of Image Buttons (with x/y coordinates): n/a
Execute Scripts included in content that is updated via AJAX:n/a
Entire traffic for the "Hello World" example [Bytes] (pure ASP.NET without framework: 3.470 bytes) Sources for the "Hello World" Example see below.:1882
HTTP Compression of AJAX Response:yes, via standard gzip compression
Automatically transfer only changes of HTML content:n/a
Save ViewState in server Session:n/a
Trigger AJAX postback via client events (without custom client script):yes, by using the controls
Trigger AJAX postback via timer (without custom client script):yes, by using the controls
Queue AJAX postbacks and wait for response when a previous request is in progress:yes
Automatic fallback to postback via IFRAME if XmlHttpRequest is turned off:n/a
Set Client Focus to input element (e.g. TextBox) in ASP1.1:the focus is never changed
Scroll to a (with designer) defined position in the web browser after AJAX response:n/a
Optional features to prevent Form input while hidden postback is in progress:all requests are queued to prevent locking
Update multiple contents parts (e.g. Panels) with a single AJAX request/callback:n/a
Control content update at runtine (e.g. Update only 1 AJAX Panel, while 2 are existing):n/a

Transferred bytes:

Traffic in bytes for initial GET response: 1154 + 728 = 1882

Traffic in bytes for referenced framework scripts (0 bytes of no script was referenced): 12000 (21876, see below)

Traffic in bytes for the POST request after button "Show DateTime" was clicked 220

Traffic in bytes for the POST response after button "Show DateTime" was clicked: 360

Total traffic in bytes for the "Hello World" example: 14462 (24338, see below)

You can see the actual transferred http messages in AJAXComparison.log.txt.

My annotations on these results

The Aspects of AJAX Engine is consuming less bytes on the network that most of the other machines in this comparison.

The size of the transferred bytes is indeed a very interesting aspect. I have not spent any time in reducing this value and I also have no chance to reduce the bytes of a standard SOAP call without leaving this standard and adding the need to implement server specific code.

The initial transfer of the page is smaller than the original ASP.NET version mainly because I do not need any ASP.NET functionality for deploying a working page.

The biggest part of the Engine is the ajax.js file with 21876 bytes because it contains a lot of comments and additional information. I could reduce this page in a view minutes by stripping off all the comments and blank lines down to 12000 bytes and it can be reduced even more. That’s the size that should be used in the comparison because the other frameworks also only send optimized include files.

The other AJAX implementations are very strong bound to the ASP.NET programming model and therefore have to solve many “content-update” topics - That's what Daniel Zeiß calls "indirect AJAX programming". The Aspects of AJAX Engine only transfers data on the network and must right now implement content changes on the client using JavaScript. This is also true for many other "direct AJAX programming" environments. By using AJAX enabled controls, even this work is not necessary because the controls can handle themselves and only the developer of the control itself has to think about it.


This page is part of the http://www.mathertel.de/ web site.