{"id":21542,"date":"2017-06-12T16:51:58","date_gmt":"2017-06-12T16:51:58","guid":{"rendered":"http:\/\/an_introduction_to_progressive_image_rendering"},"modified":"2025-03-02T06:32:25","modified_gmt":"2025-03-02T14:32:25","slug":"an_introduction_to_progressive_image_rendering","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering","title":{"rendered":"An Introduction to Progressive Image Rendering"},"content":{"rendered":"\n<style>\n.btn.exp-btn {\n    text-transform: none;\n    padding: 10px 30px;\n    font-size: 1.1em;\n    border-radius: 40px;\n    margin-top: 20px;\n    margin-bottom: 40px;\n    display: inline-block;\n    position: relative;\n    max-width: 400px;\n}\n#exp-btn-carrot {margin-bottom: 1px; margin-left: 1px;}\n.btn.exp-btn::after {\n    content: \"\";\n    display: inline-block;\n    background-image: url(https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1657723837\/exp-btn.png);\n    position: absolute;\n    background-size: contain;\n    background-repeat: no-repeat;\n    width: 33px;\n    height: 70px;\n    top: 0px;\n    right: -22px;\n}\n@media (max-width: 992px) {\n    .btn.exp-btn {margin-left: 0;}\n}\n\n@media (max-width: 500px) {\n     .btn.exp-btn {\n         max-width: initial;\n         margin-left: auto!important;\n         margin-right: auto;\n         font-size: 15px;\n         width: 300px;\n         display: block;\n         padding: 10px;\n     }\n.btn.exp-btn:after {display: none;}\n}\n<\/style>\n<div style=\"display: flex; justify-content: center;\"><a href=\"#putting_it_all_together\" class=\"exp-btn btn btn-sm btn-primary c-subscription-cta__link\">Shortcut to Cloudinary\u2019s conclusion\n<svg id=\"exp-btn-carrot\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10.759\" height=\"11.117\" viewBox=\"0 0 10.759 11.117\">\n  <path id=\"Polygon_1\" data-name=\"Polygon 1\" d=\"M4.248,0,8.5,7.518H0Z\" transform=\"translate(6.511) rotate(60)\" fill=\"#fff\"><\/path>\n<\/svg>\n<\/a><\/div>\n\n\n<div class=\"wp-block-cloudinary-markdown \"><hr \/>\n<p>[Author\u2019s Note:] This article is inspired by the work of <a href=\"https:\/\/jmperezperez.com\/about-me\/\">Jos\u00e9 Manuel P\u00e9rez<\/a>. A lot of the information presented here appeared, in one form or another, in <a href=\"https:\/\/jmperezperez.com\/render-conf-oxford-2017\/\">a talk Perez gave at Render 2017<\/a> in Oxford, England. If this article inspires you, check out his original talk.<\/p>\n<hr \/>\n<p>Images play important roles in websites, helping to improve conversions, <a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_for_websites_beautiful_pages_that_load_quickly\">enhance<\/a> user experience and increase their engagement. There\u2019s almost nothing better than an ideal image to draw the eye to where you want it to go. That\u2019s why more than two-thirds of the web\u2019s data is comprised of images.<\/p>\n<p>However, using images has its downsides. The processing power required for large images is often too great for small devices, it can be a challenge to manage large numbers of images, and bandwidth usage can be costly. In this article, we\u2019ll look at how you can save your users bandwidth and time by loading and rendering <em>well-optimized images lazily and progressively.<\/em><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/c_fill,w_770\/Prog_blog.png\" alt=\"Lazy Loading\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"770\" height=\"407\"\/>\n<a href=\"http:\/\/minimums.com\/\">Minimums.com<\/a> &#8211; Improving the UX of the site<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/c_fill,w_770\/Progressive_blog.png\" alt=\"Progressive loading\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"770\" height=\"407\"\/>\n<a href=\"http:\/\/www.kennedyandoswald.com\/\">Kennedyandoswald.com<\/a> &#8211; Increasing user engagement<\/p>\n<h2>Well-optimized images<\/h2>\n<p>The first step in optimizing your images is choosing the right image format.<\/p>\n<p>And the first format you should consider should always be SVG. We should use SVG illustrations as often as possible, taking advantage of the way they can be resized, reshaped, restyled and even further compressed. A lot of photos on the web are designed to portray concepts, rather than specific people, places or things. In these cases, vector graphics may even be an improvement to using photos, especially stock photos.<\/p>\n<p>We will always need some bitmap images. There are cases where you just need to use a photo to get your point across, or display a product, or show off a real person\u2019s beautiful smile.<\/p>\n<p>Currently, JPEG is still one of the best formats for bitmap images because of its widespread support, and the various compression algorithms available. You can get large, good-looking JPEGs that are surprisingly small in file size.<\/p>\n<p>However, WebP is fast becoming a competitor to JPEG, and its compression is far, far better. It\u2019s already supported in Chrome and Opera (and presumably any other Blink-based browser), and will soon be supported Firefox. Safari and Edge are hopefully not far behind. In the meantime, you can use the <code>&lt;picture&gt;<\/code> and <code>&lt;source&gt;<\/code> elements with the <code>type<\/code> attribute to send WebPs to browsers that support them, and JPEGs to everyone else.<\/p>\n<p>PNG and GIF are, of course, better suited to those occasions when you need transparency or animation, respectively.<\/p>\n<h2>Lazy-loaded images<\/h2>\n<p>Lazy loading is the practice of not loading content until the user scrolls down far enough to see it. This practice can save a lot of bandwidth, and is especially useful on pages where the call to action (CTA) is right at the top of the page. If half your users hit the CTA button without reading further, why load other content when you don\u2019t need it?<\/p>\n<p>Here\u2019s how it typically works: You use JavaScript to see if the space where the image will load is within the viewport. If yes, then you load the image. This approach works well enough, except that you have to run that check every time the user scrolls, or resizes the browser window. This can, somewhat ironically, hamper performance.<\/p>\n<p>Fortunately, the new <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Intersection_Observer_API\">IntersectionObserver API<\/a> offers a fix. With this API, you don\u2019t bind the image loading to scroll or resize events. You bind it to an \u201cimage entering the rendered area\u201d event, which would only happen once per image, presumably. However, the IntersectionObserver API is only currently implemented in Chrome and Opera. It is being developed in Firefox and Edge, though, so it will be a viable solution in most cases before long.<\/p>\n<p>IntersectionObserver will be great for people that want to build their own solutions. For the rest of us, there\u2019s <a href=\"https:\/\/github.com\/aFarkas\/lazysizes\">lazysizes<\/a>. It\u2019s a fully-functional, highly-optimized, and battle-tested lazy image loading library that writes out responsive <code>sizes<\/code> attributes for you, too. It works on every major browser, today (and there\u2019s even <a href=\"https:\/\/github.com\/aFarkas\/lazysizes\/issues\/263#issuecomment-261249555\">an experimental version with IntersectionObserver support<\/a>).<\/p>\n<p>A good example is shown below:<\/p>\n<iframe loading=\"lazy\" height=\"300\" style=\"width: 100%;\" scrolling=\"no\" title=\"Lazy loading images\" src=\"https:\/\/codepen.io\/eitanp461\/embed\/BRLZYq?default-tab=html%2Cresult\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href=\"https:\/\/codepen.io\/eitanp461\/pen\/BRLZYq\">\n  Lazy loading images<\/a> by Eitan Peer (<a href=\"https:\/\/codepen.io\/eitanp461\">@eitanp461<\/a>)\n  on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.\n<\/iframe>\n<p>Check out the <a href=\"https:\/\/codepen.io\/eitanp461\/pen\/BRLZYq\/\">source code on Codepen<\/a>. This demo was developed by <a href=\"https:\/\/codepen.io\/eitanp461\">Eitan Peer<\/a>.<\/p>\n<h2>Progressive images<\/h2>\n<p>A \u201cprogressive\u201d image starts off low-resolution, and progressively enhances itself over time. There are two ways we can achieve this: progressive encoding, and placeholders.<\/p>\n<h2>Progressive encoding<\/h2>\n<p>JPEG, <a href=\"https:\/\/cloudinary.com\/tools\/compress-gif\">GIF<\/a> and PNG all provide different forms of progressive encoding. Browsers can paint low-res approximations of progressively encoded images to screen, long before the full file has been downloaded. For a thorough deep dive into progressive JPEGs, please see <a href=\"https:\/\/cloudinary.com\/blog\/progressive_jpegs_and_green_martians\">\u201cProgressive JPEGs and Green Martians\u201d<\/a> by <a href=\"https:\/\/twitter.com\/jonsneyers\">Jon Sneyers<\/a> on the Cloudinary blog.<\/p>\n<h2>Placeholders<\/h2>\n<p>Placeholders don\u2019t actually make images load faster, but they can help your users remain patient. They simply tell the user that images are on the way, if the user will just wait a second. These are typically used on sites that have to load a lot of images.<\/p>\n<p>Placeholders come in several varieties:<\/p>\n<ul>\n<li>Empty spaces that match the dimensions of the image to be loaded.<\/li>\n<li>Icons &#8211; Like empty spaces, but they use a picture icon to represent the content that is yet to be loaded.<\/li>\n<li>Solid colors &#8211; Like empty spaces, but filled with color. Examples include <a href=\"http:\/\/bleacherreport.com\/\">Bleacher Report<\/a> and <a href=\"https:\/\/images.google.com\/\">Google Images<\/a>.<\/li>\n<li>Low-res versions of the images &#8211; Some sites will load a small, blurry version of the image first, then transition the full image in when it\u2019s ready. Low-res image placeholders can be combined with responsive and lazy loading techniques to make sure that users get only the bytes they need, when they need them. The classic example of this is <a href=\"https:\/\/medium.com\/\">Medium<\/a>.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/c_fill,w_770\/Lazyloading.png\" alt=\"Lazy Loading\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"770\" height=\"530\"\/>\n<em>Blurred version of the image loading\u2026<\/em><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/c_fill,w_770\/Lazyloading2.png\" alt=\"Lazy Loading\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"770\" height=\"530\"\/>\n<em>Image downloaded and fully loaded on the page<\/em><\/p>\n<p>Codepen Demo here:<\/p>\n<iframe loading=\"lazy\" height=\"300\" style=\"width: 100%;\" scrolling=\"no\" title=\"Progressive image Loading -Blurr\/Sharper\" src=\"https:\/\/codepen.io\/team\/Cloudinary\/embed\/mmQbZX?default-tab=html%2Cresult\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href=\"https:\/\/codepen.io\/team\/Cloudinary\/pen\/mmQbZX\">\n  Progressive image Loading -Blurr\/Sharper<\/a> by Cloudinary (<a href=\"https:\/\/codepen.io\/team\/Cloudinary\">@Cloudinary<\/a>)\n  on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.\n<\/iframe>\n<h2>Did We Mention SVG?<\/h2>\n<p>Jos\u00e9 Manuel P\u00e9rez, who inspired this article, developed a newer, more experimental placeholder technique. He runs an <a href=\"https:\/\/cloudinary.com\/glossary\/edge-detection\">edge detection<\/a> algorithm on the images (with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Canny_edge_detector\">Canny edge detector<\/a>) that creates a stylized illustration of the image, which is then replaced by the actual image once it loads.<\/p>\n<p>The illustrations are animated SVG files, so they load very quickly. Here\u2019s a live <a href=\"https:\/\/jmperezperez.com\/cssconfau16\/#\/40\">demo<\/a>.<\/p>\n<p>There are still some potential drawbacks of using placeholders. Simply put, if the JavaScript meant to load in the image when it\u2019s ready breaks for any reason, the user might get stuck with a very blurred version of the image (or whatever placeholder you\u2019re using). When Medium first started using their placeholder method, they got a lot of complaints about just that.<\/p>\n<h2>Putting It All Together<\/h2>\n<p>In the end, images are bandwidth, and bandwidth is money. You need to decide whether you want to, or have to, use a photo in the first place. If you do, select the right format for your project. <a href=\"https:\/\/cloudinary.com\/documentation\/image_optimization\">Optimize your images<\/a> as much as you can. Then decide how much you can rely on JavaScript.<\/p>\n<p>Lazy loading and placeholder solutions both tend to rely quite a bit on JavaScript, and if that breaks, so does your site. JavaScript can, of course, break for any number of reasons, including slow connections, slow devices, outdated software and other factors. That\u2019s why you need to know your user base, and make your decisions accordingly, while implementing fallbacks.<\/p>\n<p>If you load your well-optimized images lazily and progressively, your site will feel faster, and your users will love you for it, even if they\u2019re not quite sure why.<\/p>\n<p><a href=\"https:\/\/cloudinary.com\/users\/register\/free\/?utm_content=cta-free-sign-up-prg-img-ren\">Click here<\/a> to claim your free forever Cloudinary account.<\/p>\n<table>\n<tr>\n<td style = \"padding: 5px;\">\n<img decoding=\"async\" src=\"https:\/\/cloudinary-res.cloudinary.com\/image\/upload\/c_thumb,w_300\/Ezequiel_Bruni.jpg\" alt=\"Ezequiel Bruni\" title=\"Ezequiel Bruni\"><\/img><\/td>\n<td style = \"padding: 10px;\"><i><a href=\"http:\/\/www.ezequiel.works\/\" target=\"_new\">Ezequiel Bruni<\/a> is a web\/UX designer, writer, and aspiring e-sports commentator. When he&#8217;s not up to his finely-chiseled ears in wire-frames and front-end code, or ranting about the same, he indulges in video games, beer, pizza, video games, fantasy novels, stand-up comedy, and video games..<\/i><\/td>\n<\/tr>\n<\/table>\n<hr \/>\n<h2>Further Reading on Image Optimization<\/h2>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_for_websites_beautiful_pages_that_load_quickly\">Website image optimization and fast delivery with Cloudinary<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_php\">The complete guide to PHP image compression and optimization<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_python\">Python Image Optimization and Manipulation<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_ruby\">Image Optimization in Ruby<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/image_optimization_in_wordpress\">Image Optimization for WordPress<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/the_great_jpeg_2000_debate_analyzing_the_pros_and_cons_to_widespread_adoption\">Learn about the pros and cons of JPEG 2000<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/quick_guide_using_webp_on_your_website_or_native_apps\">Adopting the WebP Image Format for Android on Websites Or Native Apps<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/top_10_mistakes_in_handling_website_images_and_how_to_solve_them\">10 Website Image Mistakes that Slow Load Times<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/adaptive_browser_based_image_format_delivery\">Automatically Reduce Image Size Without Losing Quality<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/low_quality_image_placeholders_lqip_explained\">Automate Placeholder Generation and Accelerate Page Loads<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/progressive_jpegs_and_green_martians\">3 Ways to Do Progressive JPEG Encoding<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Shortcut to Cloudinary\u2019s conclusion<\/p>\n","protected":false},"author":41,"featured_media":21543,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[227,241],"class_list":["post-21542","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-performance-optimization","tag-progressive-image"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>An Introduction to Progressive Image Rendering<\/title>\n<meta name=\"description\" content=\"Images are bandwidth, and bandwidth is money. Having a well optimized site where images load lazily and progressively, your site will feel faster.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An Introduction to Progressive Image Rendering\" \/>\n<meta property=\"og:description\" content=\"Images are bandwidth, and bandwidth is money. Having a well optimized site where images load lazily and progressively, your site will feel faster.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-12T16:51:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-02T14:32:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"An Introduction to Progressive Image Rendering\",\"datePublished\":\"2017-06-12T16:51:58+00:00\",\"dateModified\":\"2025-03-02T14:32:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering\"},\"wordCount\":11,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA\",\"keywords\":[\"Performance Optimization\",\"Progressive Image\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2017\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering\",\"url\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering\",\"name\":\"An Introduction to Progressive Image Rendering\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA\",\"datePublished\":\"2017-06-12T16:51:58+00:00\",\"dateModified\":\"2025-03-02T14:32:25+00:00\",\"description\":\"Images are bandwidth, and bandwidth is money. Having a well optimized site where images load lazily and progressively, your site will feel faster.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"An Introduction to Progressive Image Rendering\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"An Introduction to Progressive Image Rendering","description":"Images are bandwidth, and bandwidth is money. Having a well optimized site where images load lazily and progressively, your site will feel faster.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering","og_locale":"en_US","og_type":"article","og_title":"An Introduction to Progressive Image Rendering","og_description":"Images are bandwidth, and bandwidth is money. Having a well optimized site where images load lazily and progressively, your site will feel faster.","og_url":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering","og_site_name":"Cloudinary Blog","article_published_time":"2017-06-12T16:51:58+00:00","article_modified_time":"2025-03-02T14:32:25+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images-jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering"},"author":{"name":"","@id":""},"headline":"An Introduction to Progressive Image Rendering","datePublished":"2017-06-12T16:51:58+00:00","dateModified":"2025-03-02T14:32:25+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering"},"wordCount":11,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA","keywords":["Performance Optimization","Progressive Image"],"inLanguage":"en-US","copyrightYear":"2017","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering","url":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering","name":"An Introduction to Progressive Image Rendering","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA","datePublished":"2017-06-12T16:51:58+00:00","dateModified":"2025-03-02T14:32:25+00:00","description":"Images are bandwidth, and bandwidth is money. Having a well optimized site where images load lazily and progressively, your site will feel faster.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/an_introduction_to_progressive_image_rendering#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"An Introduction to Progressive Image Rendering"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649725228\/Web_Assets\/blog\/Progressive_Images\/Progressive_Images.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21542"}],"version-history":[{"count":12,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21542\/revisions"}],"predecessor-version":[{"id":37062,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21542\/revisions\/37062"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/21543"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}