We believe that RIA are modern Internet Application but I think RIA came into existence the moment JavaScipt took birth at Netscape. It’s really at that time that client-side web app started to become “rich”.
Why “Rich” ?
In typical websites, all interface are created on the server-side. The browser only renders the HTML. However, in RIA, server acts only as a model and supplies data. The interface and business logic is implemented in the client code. So, in typical websites, the client is a “thin client” in that it only renders HTML. However, in RIA, as mentioned above, the client is responsible to create the interface and also to implement a connection module to connect to the server.
Wikipedia definition for a RIA consist mainly the following parts:
- has many of the characteristics of desktop application software
However, I disagree with this clause “typically delivered by way of a site-specific browser, a browser plug-in”. Several frameworks make use of plugins to display Internet Applications.However, plugin is not a metric to determine whether a web application is an RIA or not. For me, RIAs only mimic desktop application software and try to inherit their traits. Personally, I see 2 main traits that RIAs try to mimic:
1. High Interactivity
In RIA, we don’t wait, they are very responsive and information is on demand(though it is not). In typical websites, users are more tolerant and they consider waiting as natural. However,RIA models desktop applications which tend to be very “fast”. Bandwidth can be a bottleneck leading to latency.Thus,latency need to be hidden/abstracted though it exists. I’ll try to answer the question “How to decrease latency?” below. Also, interaction is not only one way, from users to application but also from application to user. RIA interact with the user by making users to experience their richness through their fantastic designs and behaviors. The design is what I called the Data Presentation. The behaviors are the amazing effects that RIA exhibits such as fadeIn/fadeOut, transitions, drag and drop. In short, RIA need to be “young”, “gorgeous” and must “flirt” with the user in the smoothest way.
On seeing RIAs, you’ll immediately notice that the widgets in the interface is different. Sometimes, you’ll see charts showing updated data on a real-time basis. There’ll be widgets are being updated by xmlHTTPResponses without even the user noticing it. The application structure of a RIA is somewhat different from a normal web application. Consider the following MVP pattern:
If we model an RIA using an MVP pattern then the client-side code is the View and the Presenter. The server only acts as a model for the RIA. All the codes for business logic and interface generation including a module to connect to server makes up the client. Initially all codes are obtained from the server. Thereafter, only data is obtained from the server through request made by the client communication module.
Now, I’m in a better position to answer the question, “How to decrease latency?”
1. Implement the MVP pattern described above to implement your RIA. By doing so, you’ll ensure that after the initial application load, all communication between the client and the server involves only and only bits of data.
2. Caching & Browser local storage
Implement your application such ensure caching on the level of the browser. Also, treat visibility properly so that if ever, you are using HTTP, intermediate proxies can cache your data. Then, for data that can be reused in the future, make use of the local storage.
3. Initial Application load
One very important aspect of Human Computer Interface is the enjoyment derived from using the software. So, at the same time, RIA must be at the same time useful and fun. I think that by optimizing bandwidth, ensuring a high level of interactivity and presenting data using rich widgets will allow to develop a good RIA which users will love.
Though the technology exists for building RIAs, there are some constrains that cannot be avoided such as:
- Search Engine Optimization
- Browser Features
Users on the other end make use of several browsers. We all know that browsers have incompatibilities. So, sometimes, we need to be good web developers and at the same time browser gurus to ensure consistency on all available browsers. Sometimes, when implementing some features of RIA, browser sniffing will be important. It’s boring because sometimes a particular feature must be implemented for several browsers if there is not a standard way to do it.
2.Search Engine Optimization
RIA will make use of asynchronous communication to request data from the server. The technology for achieving this is AJAX. There has always been a discussion whether not AJAX is SEO Friendly(Check this discussion here). However, Google has published a technique here to ensure that web crawlers can craw Ajaxified sites. They say it works and I’m sure it does but I’ve never used it.
RIA will always exist and so will normal websites do. Normal websites comply with browser features such as browser back/forward button, history, bookmarking. Normally, RIA are ajaxified internet application. Therefore, you’ll need to implement workarounds to ensure you don’t break those functionalities.
Development of RIA
There are several frameworks available for the development of RIAs. However, which one to choose? Personally, I’ve noticed that all RIA frameworks mitigate to maximize at least one of the three traits above. Some of the widely known frameworks are from Adobe technologies such as Flash or Flex, jQuery or Microsoft namely Microsoft Silverlight. (Here is a good list of RIA Frameworks) Check this to get an overview of RIA Statistics.
Future of RIA
I’m almost sure that the use of RIA will intensified in the coming years. Below is a study carried in 2006(obtained here):
Currently more and more companies are moving towards cloud computing(Saas) for their business solutions. Such as for accounting, some may be moving towards openERP or for CRM such as SalesForce. So, companies are now preferring Internet Application over Desktop applications. These Internet Application need to match those Desktop applications in terms of features and interactions. There comes RIAs to their rescue.