What's the Best Way to Optimize Images for the Web?

What's the Best Way to Optimize Images for the Web?

You probably aren't optimizing your images enough. I'll show you a few ways to do it, and the results from each.

Want fast loading web pages?

You probably aren't optimizing your images enough. Image optimization is frequently overlooked because it's only a small difference and takes some time to do. But a series of small changes will lead to a screaming fast website. It's worth it. Your pages will load faster.

Why does this matter?

  • It's better for your user
  • It makes your page more accessible in low bandwidth situations
  • It's better for SEO

All this in exchange for a few minutes of your time. Do you need any more reasons to optimize your images?

What We'll Do

In this article, I will show you four ways to optimize your images and the results from each of them. I'll explain how I tested them and show you the results.

You can download the files and perform your own tests by downloading this repo. Feel free to play around with it.

For testing, I decided to grab random images from unsplash. I randomized the width and height to get various dimensions you might see on the web.

I used this script to pull down 32 images and put them into a folder.

We're going to look at:

  • The raw files - with nothing done to them
  • Photoshop optimizing
  • RIOT optimizing
  • XNConvert JPEG optimizing
  • XNConvert to Webp optimizing

And we'll see how these methods stack up. We will examine file size and page load time. As a note, I do not change the resolution or color depth of these images, so they are all the same except for the optimizations.

How I'm Testing Load time

I'm testing load time by creating a simple index.html file in each folder that loads up a table of the images. I am serving it up with the NPM serve package because it's a simple HTML server that runs locally. I don't want network latency to affect the results.

Then I use CURL to grab the load time:

curl -s -o /dev/null -w "%{time_total}\n" -H "Pragma: no-cache" https://localhost:3000

Let's optimize some images and see the results.

Raw Images

This is a test with the images straight from Unsplash. It is our baseline measurement.

Here is the total file size for all images:

How to Optimize JPG images for the Web

So we're starting with 3.1MB of images. Not too shabby, but not small either.

Here is the page load time:

How to Optimize JPG images for the Web

I ran the test ten times and got an average load time of 0.0013495 seconds. It seems fast, but we can improve on it.

Optimized with Photoshop

For the next set of images, I optimized these with Photoshop. I used the following settings:

How to Optimize JPG images for the Web

I set a quality of 60 and set it to progressive with no metadata. I got some interesting results.

Here is the total file size for all images:

How to Optimize JPG images for the Web

It's 3.3MB, which is more than we started with. I have no idea why this is and will investigate and update later. But most of the time, this creates smaller images.

Here is the page load time:

How to Optimize JPG images for the Web

Our average load time is 0.001213 seconds, which is a little above the raw files. Not much of a surprise with this file size.

Optimized with RIOT

Next, I optimized the images with the Radical Image Optimization Tool (RIOT). This is only available in Windows, but it's an excellent tool I've been using for years.

I used the following settings:

How to Optimize JPG images for the Web

And even though I left the quality pretty high at 82%, it shrunk the files down considerably:

How to Optimize JPG images for the Web

Here is the total file size for all images:

How to Optimize JPG images for the Web

At 2.3MB, that's quite a bit of savings. This reduces your website's footprint without sacrificing quality.

Here is the page load time:

How to Optimize JPG images for the Web

Our average load time is 0.0010877 seconds, which is our fastest yet.

Optimized with XNConvert (JPG)

For this test, I optimized the images with XNConvert and used it to optimize the JPEGs. This is the tool I use the most because it runs in Windows, Mac, or Linux and does batch processing quickly.

How to Optimize JPG images for the Web

I removed the metadata:

How to Optimize JPG images for the Web

Then saved them with the following settings:

How to Optimize JPG images for the Web

Here is the total file size for all images:

How to Optimize JPG images for the Web

At 2.2MB, this is the smallest we've seen yet. However, I don't expect it will significantly improve load time over the previous 2.3MB of images.

Here is the page load time:

How to Optimize JPG images for the Web

The average is 0.001085 seconds, which is a little faster than RIOT. Great!

I highly recommend XNConvert for image optimization. But, we can take this even a step further and convert everything to Webp images. These will be significantly smaller and hopefully faster.

Optimized with XNConvert (WebP)

So I took the same set of raw images and converted them to .webp images. This is Google's recommended image format these days, and it's easy to see why.

Here are the settings I used:

How to Optimize JPG images for the Web

Here is the total file size for all images:

How to Optimize JPG images for the Web

Wow! We went from 3.1MB of images to 1.5MB. That's significant. Let's see what it does to load time.

How to Optimize JPG images for the Web

The average is 0.0010326 seconds, which is a new record. Great!

This is something you should consider when doing image optimization on your site. Webp images are the way forward.

Let's Look at the Results!

This is the total file size for all images:

How to Optimize JPG images for the Web

MethodFile Size
Raw images3.1MB
Photoshop3.3MB
RIOT2.3MB
XNConvert (JPG)2.2MB
XNConvert (Webp)1.5MB

How to Optimize JPG images for the Web

MethodLoad Time
Raw images0.0013495
Photoshop0.001213
RIOT0.0010877
XNConvert (JPG)0.001085
XNConvert (Webp)0.0010326

Conclusion

Optimize your images! As you can see, it makes a difference, even with this small page with 32 images on it. I will do this experiment again with a larger image set to see how the changes scale.

Overall it's pretty clear that .webp images are smaller and more efficient.

It's definitely worth the few minutes of extra time.

Questions? Comments? yell at me on Twitter!

-- Jeremy