Performance Research, Part 6: Less is More — Serving Files Faster by Combining Them
In Performance Research Part 1, we discussed how reducing the number of HTTP requests has the biggest impact on improving the response time and is often the easiest performance improvement to make. One technique without having to simplify the page design is to combine multiple scripts into a single script, and similarly combine multiple stylesheets into a single stylesheet.
Combining multiple files reduces the extra bytes from HTTP headers as well as potential transfer latency caused by TCP slow starts, packet losses, etc.
Figure 1 shows a graphical view of how time is spent loading a page with six separate scripts. Notice that for every file, the browser makes a separate HTTP request to retrieve the file. The gaps between the scripts indicate the time the browser takes to parse and render each script. Figure 2 shows the how time is spent loading a page with the same six scripts combined into a single script.
Figure 1. Loading a page with six separate scripts
Figure 2. Loading a page with one combined script
Serve Files Faster using Combo Handler
Combo Handler, built in collaboration by Yahoo!'s Exceptional Performance team and the groups that support our CDN, is one solution to combine multiple files into a single, larger file.
Combo Handler provides a way to allow developers to maintain the logical organization of their code in separate files, while achieving the advantages of combining those into a single file as part of the final user experience. It alleviates the need for the time-consuming re-build and re-push processes. In addition, Combo Handler integrates seamlessly into a content delivery network, taking full advantage of the benefits of a CDN while reducing the drawbacks of dynamically combining separate files.
Combo Handler Best Practices
When using Combo Handler to combine files, pay special attention to the order in which the files are specified. Not only could there be file dependencies, browsers will only use the cached version of a file if the filename extracted from the URL is identical. For example, suppose the following smaller files (
event.js) are combined into a single larger file using Combo Handler:
In the example above, the browser will download and cache both files separately because the filenames are actually different.
Also, you may not always want to combine all files into one single file. Suppose you have one or more scripts that are shared across multiple pages in your site in addition to scripts that are only used on specific pages. By combining everything into one large file and using this file across your entire site, some pages will spend time downloading more than it really needs. Instead, take a look at different types of combinations. You might combine the scripts that are used in every page across your site into one script. Then for each page or group of pages, combine common scripts into another separate script.
Yahoo! HotJobs Combines and Reduces Response Time by 8%!
Keep in mind that the page we tested was already highly optimized for performance and had a YSlow "A" grade. The response time savings depend on a number of factors including number of files combined, browser caching patterns, etc. This experiment supported our previous research, which indicated that reducing HTTP requests is an effective way to improve response times for our end users.
- Combine scripts and stylesheets to reduce HTTP requests.
- Look at different types of file combinations.
- Avoid users from having to download more than they really need.
- Pay special attention to the order in which files are combined.