The art and science of performant Web 2.0 AJAX apps

With so many frameworks, libraries and open source AJAX widgets it’s easy for a well performing Web 1.0 site to be ‘upgraded’ into a poor performing web 2.0 site. Microsoft made it very easy to Ajaxify a web app with ASP.NET AJAX offering both 

  1. the update panel for plug & play AJAX including smarts for injecting and executing script blocks,
  2. support for writing script control behaviour and
  3. ability return JSON from script web services.

A good web developer will always keep performance in mind when wiring up a page (using tools such as FireBug and YSlow to pinpoint bottlenecks).  But with so many helpful high-level JS libraries such as Prototype, JQuery, DOJO etc. it can be easy to forget how expensive repeated DOM calls are. 

If nothing else, performance is a good reason to embrace the GWT and Script# toolkits – as they enable you to write compile checked code while outputting performant JS that doesn’t necessary have any reliance on an interpreted JS framework.

However perhaps more important then all of the above is how to make your application ‘feel’ like it loads quickly and is responsive.  This really comes down to understanding what information needs to be immediately available, what can be lazy-loaded/rendered, including scripts.  Joseph Smarr from plaxo has a good presentation on ‘Why Everything You’ve Been Taught is Wrong’.

Finally if that all sounds like to much hard-work, then look out for DOLOTO – a Microsoft research initiative which attempts to automagically lazy-load your app for you!


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: