I've been working on the same web project for over 2 1/2 years now... Its been a great experience because I was able to start the foundation of the project and have watched it grow from an idea, to a simple 2-tier ASP.Net web app, and now to a multi-tier application which utilizes a wonderful service architecture and has numerous external integration points. I've worked with great people along the way and we still have an impeccable team but there is one thing looming on the horizon which we cannot fend off. Its the J-word. Not my beloved J# but JavaScript.
When the project started, ASP.Net 2.0 was the latest and great and with Atlas looming on the horizon we designed the application with the expectation that the UpdatePanel would AJAXify the user's experience so that they felt like they were working with a rich client. Well it was great for a while but once we started stacking up more features in smaller content areas (which is another issue all-together) we started realizing the the standard UpdatePanel callbacks were not cutting it. Plus with sites like flickr, facebook, etc. it makes it much more difficult to please your users with traditional postbacks (even if they are wrapped in UpdatePanel AJAX calls). We had previously evaluated our WCF service to see if the issue was SQL roundtrips, other service dependencies, and all that we found was a very well performing infrastructure which should only yield a great web application for its frontend. The only left to change was the web application tier itself, so we began to scrutinize where we could squeeze a few more seconds with each user click.
What we realized a few weeks ago is that we were going to need to embrace JavaScript to make true AJAX calls...which meant that we were going to:
1. Bind our grids using full client side databinding - For this we would be making PageMethod AJAX calls or Webservice AJAX calls. We planned on using the latest Telerik RadGrid for our grid control. (Using the Telerik Grid control has been a nightmare thus far but ill post on that @ a later time)
2. Use the Telerik RadWindow control for our popups - In the past we were using <Div>'s to hide and show content within the context of an update panel. It looked great but the extra 1-2 second(s) of lag time added up to a poor user experience.
3. Focus on the overall user's experience by trying to eliminate mouse-clicks with a new set of navigation controls. The first one which we are building is a flickr style control which when you hover over, will dynamically build a context menu so that users can navigate to their immediate need. (Since our app is a CRM the contact names will contain this functionality)
Overall this is our current approach. We are in the middle of our first sprint meant to tackle the performance improvements so we're hopeful that a lot of positives will come out of this. More posts will follow documenting our experiences...