{"id":10095,"date":"2025-10-07T15:12:15","date_gmt":"2025-10-07T15:12:15","guid":{"rendered":"https:\/\/hellonitish.com\/blog\/?p=10095"},"modified":"2025-10-15T14:44:57","modified_gmt":"2025-10-15T14:44:57","slug":"i-optimized-image-delivery-and-made-my-website-faster","status":"publish","type":"post","link":"https:\/\/hellonitish.com\/blog\/i-optimized-image-delivery-and-made-my-website-faster\/","title":{"rendered":"My Website Got Faster Than Ever After I Optimized Images"},"content":{"rendered":"\n<p>Let\u2019s be real. Nothing kills user experience faster than a website that drags its feet. And the biggest culprit? Images. Huge, unoptimized images. We all love big visuals, but your users don\u2019t love waiting for them to load.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Optimized Images Should be a Priority<\/h2>\n\n\n\n<p>Images usually make up the bulk of a page\u2019s weight, and when they\u2019re not optimized, every visitor ends up paying the price in seconds (and frustration). Here\u2019s why optimizing them matters more than you think:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Faster Page Load<\/strong> \u2013 Smaller images mean fewer bytes to transfer. Fewer bytes mean faster pages. This might not matter much on high speed home WiFi networks but it absolutely does for mobiles.<\/li>\n\n\n\n<li><strong>Better SEO<\/strong> \u2013 Speed is an actual ranking factor, so bloated images are basically SEO self-sabotage. If your pages take forever to load, your rankings take a hit.<\/li>\n\n\n\n<li><strong>Reduced Bandwidth<\/strong> \u2013 Optimized images save bandwidth for your users. This is important because mobile data can be very expensive in some parts of the world. Also, the extra bandwidth you save adds up to a big total when you are serving thousands or millions of users. This can mean lower hosting bills for you.<\/li>\n\n\n\n<li><strong>Improved UX<\/strong> \u2013 Nobody likes staring at a half-loaded page. Users drop off fast when a site feels slow or janky. Faster loads mean smoother scrolling, happier users, and fewer \u201cI\u2019ll check it later\u201d exits.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The Two Things that I did to Optimize Image Delivery<\/h2>\n\n\n\n<p>Other factors being equal, the two things that matter the most for optimized image delivery are choosing the right format, and the right size.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Serve the Right Format<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\" class=\"n-bshadow n-round-x2\"><img decoding=\"async\" width=\"1024\" height=\"585\" loading=\"lazy\" src=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format-1024x585.webp\" alt=\"\" class=\"wp-image-10153\" srcset=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format-1024x585.webp 1024w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format-320x183.webp 320w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format-460x263.webp 460w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format-640x366.webp 640w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format-800x457.webp 800w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format-1200x686.webp 1200w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/serve-right-format.webp 1344w\" sizes=\"auto, (max-width: 767px) 100vw, (min-width: 768px) and (max-width: 1300px) 66.67vw, 765px\" \/><\/figure>\n\n\n\n<p>Choosing the right format is the first step to delivering optimized images. The wrong format can bloat your images, slow down your site, and frustrate users <strong>without improving image quality<\/strong>, even if the dimensions are perfect.<\/p>\n\n\n\n<p>Here\u2019s the quick breakdown:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>JPEG<\/strong> \u2013 Great for photos. Small file sizes, decent quality. Doesn\u2019t support transparency.<\/li>\n\n\n\n<li><strong>PNG<\/strong> \u2013 Perfect for images that need transparency or sharp edges. Photos and screenshots usually have larger file sizes than JPEGs, but flat vector illustrations with <strong>limited colors<\/strong> and <strong>no gradients<\/strong> can end up <strong>smaller if optimized<\/strong>. If you can use <\/li>\n\n\n\n<li><strong>WebP<\/strong> \u2013 The modern all-rounder. Almost always smaller files than JPEG or PNG, supports transparency, and is widely supported.<\/li>\n<\/ol>\n\n\n\n<p>In practice, <strong>WebP is excellent for most use cases<\/strong>. One limitation is that some image editors and software still don\u2019t support it as widely as JPEG or PNG but that&#8217;s changing fast.<\/p>\n\n\n\n<p>Let\u2019s take the featured image of this post as an example. The <a href=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-original-unoptimized-jpeg.jpg\" data-type=\"link\" data-id=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-original-unoptimized-jpeg.jpg\">original unoptimized JPEG<\/a> was 263 KB, while an <a href=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-optimized-jpeg.jpeg\">optimized JPEG<\/a> came down to 87 KB with no noticeable loss in quality. The <a href=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-unoptimized-png-1.png\">unoptimized PNG<\/a> was 541 KB, and the <a href=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-optimized-png.png\">optimized PNG<\/a> dropped to 111 KB. <a href=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-webp.webp\" data-type=\"link\" data-id=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-webp.webp\">The WebP version<\/a>? Just 41 KB.<\/p>\n\n\n\n<p>Switching from the original JPEG to WebP alone saved over 222 KB for a single image. Multiply that by 10 images in a blog post, and you\u2019re looking at roughly <strong>2.2 MB savings<\/strong> just from using the right format.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Serve the Right Size<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\" class=\"n-bshadow n-round-x2\"><img decoding=\"async\" width=\"1024\" height=\"585\" loading=\"lazy\" src=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries-1024x585.webp\" alt=\"\" class=\"wp-image-10156\" srcset=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries-1024x585.webp 1024w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries-320x183.webp 320w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries-460x263.webp 460w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries-640x366.webp 640w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries-800x457.webp 800w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries-1200x686.webp 1200w, https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/different-sized-sceneries.webp 1344w\" sizes=\"auto, (max-width: 767px) 100vw, (min-width: 768px) and (max-width: 1300px) 66.67vw, 765px\" \/><\/figure>\n\n\n\n<p>Serving a <strong>3840px-wide image<\/strong> to a mobile visitor with a <strong>480px-wide screen<\/strong> is a colossal waste of bandwidth. If the height scales proportionally, that\u2019s a <strong>64\u00d7 increase in pixel count<\/strong>, and the file size will be much larger as well.<\/p>\n\n\n\n<p>Ideally, visitors should only load images roughly the size they\u2019ll see. For example, if an image renders at 480px wide, that\u2019s the size you should serve. You don\u2019t need a perfect match. Just strike a balance between the required effort and the optimization benefits.<\/p>\n\n\n\n<p>On my site, I use up to eight different image sizes, but in <strong>some cases<\/strong>, just <strong>two sizes are enough<\/strong>. The key is to serve what\u2019s necessary without over-engineering.<\/p>\n\n\n\n<p>You can easily handle different screen sizes by using the <code>&lt;picture&gt;<\/code> tag or the <code>srcset<\/code> attribute on <code>&lt;img&gt;<\/code> tags, allowing browsers to pick the most appropriate resolution automatically.<\/p>\n\n\n\n<p>It\u2019s important to note that even on large screens, smaller images can be more appropriate depending on the layout. For instance, my archive page cards display smaller featured images when the layout shifts to multiple columns with a sidebar on large screens.<\/p>\n\n\n\n<p>A careful developer keeps this in mind when setting up <code>&lt;picture&gt;<\/code> and <code>&lt;img&gt;<\/code> tags. Here\u2019s an example from my own site:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;picture&gt;\n\t&lt;source srcset=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-320x183.webp\" media=\"(max-width: 360px)\"&gt;\n\t&lt;source srcset=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-460x263.webp\" media=\"(max-width: 520px)\"&gt;\n\t&lt;source srcset=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-640x366.webp\" media=\"(max-width: 720px)\"&gt;\n\t&lt;source srcset=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-800x457.webp\" media=\"(max-width: 767px)\"&gt;\n\t&lt;source srcset=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-640x366.webp\" media=\"(max-width: 991px)\"&gt;\n\t&lt;img class=\"n-image-responsive n-round-x5\" src=\"https:\/\/hellonitish.com\/blog\/wp-content\/uploads\/2025\/10\/image-optimization-case-study-460x263.webp\" alt=\"\"&gt;\n&lt;\/picture&gt;<\/code><\/pre>\n\n\n\n<p>In the previous section, I mentioned the full-size WebP image is around 41 KB.<\/p>\n\n\n\n<p>But on my site, I only need to serve a 460px version on larger screens because of how the theme is designed. That smaller image weighs just 8KB saving about 32KB per image. With 10 posts on an archive page, that\u2019s roughly 320KB saved per page load. On a slow network, that difference can be huge.<\/p>\n\n\n\n<p>And when a million people visit similar pages, that 320KB saved per page adds up to roughly 300GB of <strong>saved bandwidth<\/strong>, translating into <strong>substantial cost savings<\/strong>.<\/p>\n\n\n\n<p><strong>For eCommerce stores, the impact is even greater.<\/strong> Imagine 50+ product images loading as users scroll through a catalog. <strong>Every saved kilobyte means faster pages, higher conversions and reduced costs<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-group ntu-alert has-background\" style=\"background-color:#dff2ff\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">How Shopify and WordPress Handle Image Optimization<\/h3>\n\n\n\n<p>Shopify and WordPress both let you serve optimized images, but they approach it differently.<\/p>\n\n\n\n<p><strong>Shopify<\/strong> does most of the work automatically. Uploaded images are converted to WebP for supported browsers, and multiple sizes are generated in roughly 100px increments. The browser picks the version closest to the visitor\u2019s screen based on the <code>srcset<\/code> value. A developer still needs to pair this with appropriate <code>sizes<\/code> value to get maximum benefit. You can deliver more targeted and optimized images using the <code>picture<\/code> tag but that requires a developer (like me).<\/p>\n\n\n\n<p><strong>WordPress<\/strong>, on the other hand, gives you more control but also more responsibility. By default, it generates a few standard image sizes (thumbnail, medium, large), but to get more precise optimization, you often need plugins like Smush, ShortPixel, or WebP Express. These tools handle format conversion, resizing, and compression, but you have to install and configure them yourself.<\/p>\n\n\n\n<p>In short: Shopify is <strong>automatic and hassle-free<\/strong>, while WordPress is <strong>flexible but requires setup<\/strong>. Both can deliver fast images \u2014 it\u2019s just a question of how much manual work you want to do.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>I also take optimization a step further by running custom scripts to convert images to WebP, fine-tune compression, and create extra size variants when needed to make sure your site loads fast without sacrificing quality.<\/p>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">How Much Difference Can it Make?<\/h2>\n\n\n\n<p>That depends on how unoptimized your current setup is.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">No Image Optimization at All<\/h3>\n\n\n\n<p>A typical archive page on my site shows 10 post cards, each with its own featured image. Serving full-size, unoptimized JPEGs adds up to around <strong>2,630 KB<\/strong> of image weight. Properly sized and optimized WebP versions of the same images total just <strong>80 KB<\/strong> which is about <strong>97% less<\/strong> image weight for the page.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Some Optimizations Already in Place<\/h3>\n\n\n\n<p>If your images are already properly resized, <strong>switching to WebP<\/strong> can still cut file sizes by <strong>up to 50%<\/strong>.<\/p>\n\n\n\n<p>If you\u2019re <strong>already using WebP<\/strong> but not resizing correctly, the savings depend on how large the downloaded image is compared to its displayed size.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tips to Further Optimize Image Delivery<\/h2>\n\n\n\n<p>Optimizing size and format gets you most of the way there, but there are a few extra tricks that can squeeze out even more speed. The idea is simple: <strong>load what matters first, and delay everything else<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prioritize Above-the-Fold Images<\/h3>\n\n\n\n<p>These are the images users see immediately when a page loads. For instance, your hero banners, logos, or key visuals. Because they appear first, the browser should treat them as high priority. Use <code>fetch-priority=\"high\"<\/code> so the browser knows to load them immediately. This ensures your site feels fast right from the start.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lazy Load Other Images<\/h3>\n\n\n\n<p>Images further down the page, in carousels, or below-the-fold sections don\u2019t need to load immediately. Lazy-load these images using <code>loading=\"lazy\"<\/code>. This cuts initial page weight, reduces bandwidth, and improves perceived speed.<\/p>\n\n\n\n<p>There are some caveats though. For example, carousels are a bit tricky. If you lazy-load carousel images, they often only start loading when the slide actually comes into view. This can cause a noticeable delay because the image might &#8220;pop in&#8221; a second after the slide appears.<\/p>\n\n\n\n<p>Lazy loading takes some effort and expertise to get right. This is where <strong>I can help you get maximum performance without impacting user experience<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p>Get size and format right, prioritize above-the-fold images, lazy-load the rest and your site will feel noticeably faster for everyone. You can always hire me if you want to outsource all this to someone competent.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Let\u2019s be real. Nothing kills user experience faster than a website that drags its feet. And the biggest culprit? Images. Huge, unoptimized images. We all love big visuals, but your users don\u2019t love waiting for them to load. Why Optimized Images Should be a Priority Images usually make up the bulk of a page\u2019s weight, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":10142,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-10095","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-case-studies"],"_links":{"self":[{"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/posts\/10095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/comments?post=10095"}],"version-history":[{"count":28,"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/posts\/10095\/revisions"}],"predecessor-version":[{"id":10162,"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/posts\/10095\/revisions\/10162"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/media\/10142"}],"wp:attachment":[{"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/media?parent=10095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/categories?post=10095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hellonitish.com\/blog\/wp-json\/wp\/v2\/tags?post=10095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}