[Ed note: This is the second in a series of posts on web design and performance. You can see the introductory post here.]
Images make up the majority of most sites’ page weight. Thanks to their size and the number of image requests made by an average site, optimizing images is arguably the easiest big win when it comes to improving your site’s page load time.
Let’s start by looking at the various image types available, and then work through the various options you have for optimizing them.
Image File Types
You have a range of file types to choose from when creating images for your site. When generating an image, ask yourself:
* How compressed can this image be?
* How many colors are needed?
* Do I need transparency?
When you need transparency in your image, PNG is your best choice. GIFs also support transparency, but they tend to be much heavier than PNGs. PNG-8 contains a maximum of 256 colors within the image, and generally result in a smaller file size. If you have a small number of colors in your image, PNG-8 will likely be your best option of all image file types, thanks to its small size. While Photoshop supports exporting PNG-8 with binary transparency, it also supports creating PNG-24 images with partial transparency as well as millions of colors. This naturally results in a larger file size.
Use JPEG for photos and other images with tons of colors. JPEGs do not support transparency. JPEG is a lossy compressed file format, unlike PNGs, which are lossless. While you can use PNGs for photos, they will often be five to ten times larger in file size than JPEGs because they are lossless. Since you're aiming for the smallest file size to decrease page load time, and web images typically have more than 256 colors, it's no surprise that the majority of the images analyzed by HTTP Archive are JPEGs.
Optimizing Image Request Size
If you use Photoshop, test out a few different qualities and file types in the Save for Web workflow. You’re aiming for a happy medium of acceptable quality and small file size. Most people find that for JPEGs, 80-90% quality works well, but it’s important to play with the file size and see what level of compression is noticeable. Look for artifacts, inaccurate contrast between elements, and blurry details and text.
After you’ve exported the image, run it through a tool like ImageOptim, which finds the best compression technique for a variety of file types. There’s also SmushIt, which is an online lossless image optimizer. These tools can save you a ton of additional file size by finding ways to reduce the image size without visibly reducing the quality of the image.
Optimizing the Number of Image Requests
In addition to decreasing your images’ file sizes, it’s also important to decrease the number of image requests on the page to improve page load time. One way to do this is to combine images into sprites. Your page weight might increase slightly because you’ll have one large image file and additional CSS to position the site elements, but it’s likely that combining images into a sprite will be a huge win for page speed.
Another way to decrease image requests is to replace them with CSS3 gradients. CSS3 gradients (aka visuals):
* Can handle transparency
* Can be overlaid on a background color
* Eliminate an image request
* Are super easy to re-edit
CSS3 can be a great, performant replacement for images. Don’t worry about the extra page weight from the vendor-prefixes in CSS3 syntax; if you arent’ already, you should be using GZIP on your site, which will take care of optimizing this code. Even though you will be loading more CSS, it’ll still be a faster-loading option than an image request.
Optimizing images is likely the biggest win for performance on your site. As you take a look at the images on your site, ask yourself:
* Can I save any file size by choosing a different image format?
* Have all of my images been run through a lossless compression tool?
* Can any of my image requests be replaced with gradients or sprites?
* Is there any UI slugishness that could be due to repaint times?
In the next post, we’ll cover optimizations you can make to the HTML and CSS of your site such as creating design patterns that can be repurposed, identifying the best naming patterns for your elements, and caching assets correctly.