Web applications are, by their very nature, distributed. As clients increase their processing capability, the degree to which you can distribute processing between the client and server increases. By distributing some of the processing to the client you will increase your application's responsiveness. Distribution of processing, however, also increases the complexity of your application design.
You should keep in mind two design goals when you distribute processing between the client and server. First, you want to minimize communication across the HTTP connection. Regardless how fast the connection you have established is, local processing will always be faster. You should pass information between the client and server only when absolutely necessary.
A second design goal is to expose only those server resources to the client that are absolutely necessary to accomplish the processing task. Each request from the client should be fully qualified so that the server does not have to respond to the client for further information and thereby increase roundtrips across the HTTP connection. For example, if a client can completely describe its capabilities to the server when it makes a request, the server can immediately send a response that matches those capabilities rather than requesting further information from the client. This design concept can also be applied to the design of Web applications that support database access. For example, if a client is checking the status of an order, you should provide the client with a recordset that describes only that particular order, rather than all the records in the orders table.