What a rich client can do for you
Imagine if you could reference any HTML element rendered on the screen, change its properties, set handlers triggered by events, and modify its appearance -- all instantaneously. Well you can. With the W3C-defined DOM, you can programmatically access and manipulate a page's elements and their corresponding attributes.
Whereas before a UI designer was primarily limited to page-level interaction, now he can design complete interactivity at the element level. Anything from table cells to form fields to links, you can uniquely reference and modify client side through both their attributes and CSS properties. You can make each screen more like a mini-application. A set of data with a dynamic set of UI can be downloaded to the user's machine, where the user manipulates the data in real time through advanced, more efficient interactions.
The standard level of interaction with a basic Web application is simple form data entry with a static set of information. At this level of interaction, the user is stranded on a small barren island of limited functionality.
A rich client application, instead, reveals a paradise. Since the set of UI delivered to the user is rich in functionality, the user can quickly and easily manipulate the data extensively before making a server hit (and taking the corresponding performance hit). For a basic data form entry screen, such as an online credit card application, a rich client gains little, if any, performance boost because the user activity is limited. Client-side data validation, which may be considered basic rich client functionality, would provide some value. Beyond that, however, not much more interactivity can improve the data entry process. As you start to implement Web applications as true applications that require significant data manipulation, a rich client design can greatly improve user efficiency.
Rather than make the user a slave to the application, requiring frequent trips to the server, the rich client application puts the user in control. To a far greater extent, you can implement the usage paradigm of traditional applications, where a user manipulates data and proactively (at the user's command, not the application's decree) saves the changes.