What about the users?

Many of the previous posts in this section have focused on API performance.  This is the first post in a series about end user performance. Over the next few posts I will cover what impacts the end users perceived performance and what you can do to improve the end users performance.  Some of the questions we will answer are:

  • Do browser settings matter?
  • How does geography impact performance?
  • In the on-demand model do a developer's choices impact performance?

Now one of the questions you may ask is “Doesn’t on-demand mean that salesforce.com is supposed to take care of the problem for us?”  The short answer is YES!  We do all the server performance and monitor the network performance.  The salesforce.com support team can even send you a nice email with the browser settings to optimize performance on your computer.  The longer answer is that as salesforce.com provides more capability for you to configure salesforce.com, there are more areas of which you can impact performance.  This post will start with the easy stuff and follow-on posts will get into more detail aka the harder stuff.

To get rolling let's set up a framework to consider performance. Generally in any web based application there are three components of performance:
– Server time
– Network time
– Client time

Server time is the amount of time that it takes our servers to process the requests.  This is the number that you see on trust.salesforce.com.  These numbers are measured at our service. The server time includes all of the processing that salesforce.com must do to answer the request.  We start counting the time from when we receive the request until we send the response.

Network time is the time it takes to transmit the information over the network. This includes the time to create a connection and lookup a host name in DNS.

Client time is the amount of time it takes for the client to interpret the response and make additional requests and paint the screen.  As web based applications get more complex (richer ui) the client effort to evaluate and render the HTML, Css and javascript grows quickly. In most web based applications the the server time for generating the HTML content and network transfer time are only small factors in page performance, typically only 5% to 20% of the page loading time.    

So now that we have agreed on the components of performance, what should we do?

How can you impact performance? Let's start with the client.  There are several components to the client; client configuration, hardware and page design.  In this initial post we are going to discuss client configuration.  Now I know many of you do not use IE.  These guides are for IE7.  On the client the biggest impact can be made with the browser configuration of:

  • Caching
  • Using HTTP 1.1
  • Parallelization of requests

Caching– caching is the single largest impact. Retrieving a standard salesforce.com account page can be one HTTPS request or 90 HTTPS requests (your number may vary based on your configuration). The 90 HTTPS requests is a worst case scenario if caching is totally disabled.  From a time standpoint in my testing the single request was sub second while the 90 requests took over 10 seconds. Caching clearly has a big impact.  In Internet Explorer there are a couple of areas that need to be explored to ensure caching is properly configured. Here is how to ensure that you are caching properly in IE7:

In the Browser window click the Tools menu > Internet Options:

  1. In the General Tab:
    1. In the “Browsing history” section > click the "Settings" button.
    2. Select the "Every time I visit the webpage" radio button and ensure there is enough disk space for the cache. The ideal cache size is between 20 and 50 megabytes (MB).
    3. Click the "OK" button.
  2. In the Privacy Tab
    1. Select "Advanced" button
    2. Check "Override automatic cookie handling" setting
    3. Also check "Always allow session cookies"
  3. In the Advanced Tab:
    1. Scroll to the bottom of the Settings window
    2. The "Do not save encrypted pages to disk" check box should NOT be selected
    3. The "Empty Temporary Internet Files Folder when browser is closed" check box should be selected
    4. The "Use SSL 2.0" and "Use SSL 3.0" check boxes should be selected

HTTP 1.1– This is a browser setting that can impact performance. HTTP 1.1 specifies being able to compress transfers with gzip and keeps TCP/IP connections open between requests. The gzip encoding can have a big impact as Simon points out in this post.  To turn on HTTP 1.1:

Click the Tools menu, and select Internet Options. 

  1. Click the Advanced Tab, and scroll approximately half-way down the Settings box. 
  2. Select the “Use HTTP 1.1” checkbox
  3. Select the "Use HTTP 1.1 through proxy connections" check box.

Parallelization – the HTTP standard specifies that there should not be more than two parallel requests. With 90 assets on a page and two connections you can see how performance can be improved if we can make four parallel requests.  Newer browsers such as IE8 will allow parallel requests.  To enable Parallel requests in IE6 and IE7 you will need to edit the registry (not a simple task).  This Microsoft knowledge base article discusses how to modify the registry for IE7 to allow more than two parallel connections per host.

Bottom line is that there are many settings in the broswer which impact performance.  In the next post we will spend some more time on client performance including what you can configure in salesforce.com that impacts client performance.  In future posts we will also discuss how to measure performance and where we can maximize performance when seconds count!

November 21, 2008

Leave your comments...

What about the users?