<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Md Abdullah</title>
    <description>The latest articles on DEV Community by Md Abdullah (@mdabdullah_dev).</description>
    <link>https://dev.to/mdabdullah_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3362756%2Ffc08b9f5-527b-4492-a195-cfbf7909b885.jpeg</url>
      <title>DEV Community: Md Abdullah</title>
      <link>https://dev.to/mdabdullah_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mdabdullah_dev"/>
    <language>en</language>
    <item>
      <title>Shopify Store Speed: The Theme and Liquid Fixes I Reach For First</title>
      <dc:creator>Md Abdullah</dc:creator>
      <pubDate>Wed, 21 Oct 2026 14:36:04 +0000</pubDate>
      <link>https://dev.to/mdabdullah_dev/shopify-store-speed-the-theme-and-liquid-fixes-i-reach-for-first-2dn2</link>
      <guid>https://dev.to/mdabdullah_dev/shopify-store-speed-the-theme-and-liquid-fixes-i-reach-for-first-2dn2</guid>
      <description>&lt;h1&gt;
  
  
  Shopify Store Speed: The Theme and Liquid Fixes I Reach For First
&lt;/h1&gt;

&lt;p&gt;When a Shopify store feels slow, the cause is rarely one big problem. In my experience building and fixing stores, it is usually a pile of small ones: scripts from apps nobody uses anymore, images far bigger than the space they render in, fonts loading in a way that blocks the page, and sections below the fold doing heavy work before a visitor ever scrolls to them.&lt;/p&gt;

&lt;p&gt;None of these need a rebuild to fix. Here are the theme and Liquid level checks I run first, in the order I run them.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Audit what your apps are injecting into theme.liquid
&lt;/h2&gt;

&lt;p&gt;Every app that adds a widget, a popup, a review badge, or a chat bubble usually loads its JavaScript and CSS on every page, whether that page needs it or not. Over a year or two of installing and removing apps, the leftovers add up, and some removed apps leave their code behind in your theme files.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;layout/theme.liquid&lt;/code&gt; and look at what is being loaded in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and before &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;. Then check the &lt;code&gt;{{ content_for_header }}&lt;/code&gt; area indirectly by viewing the page source of your live store and searching for script tags you do not recognize.&lt;/p&gt;

&lt;p&gt;A practical way to audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List every app currently installed in your Shopify admin.&lt;/li&gt;
&lt;li&gt;View the page source and note each third party script domain.&lt;/li&gt;
&lt;li&gt;Match the two lists. Anything loading that does not match an installed, active app is a candidate for removal.&lt;/li&gt;
&lt;li&gt;For apps you do use, check their settings. Many have an option to load only on specific page types, for example only on product pages. A reviews app rarely needs to load on your About page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an app left a snippet behind, you will often find it in &lt;code&gt;theme.liquid&lt;/code&gt; or in a snippet file with the app name. Remove it, preview the theme, and test the pages the app touched before publishing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Stop shipping giant images
&lt;/h2&gt;

&lt;p&gt;The most common image problem I see is a store uploading a 3000px wide photo and letting the browser shrink it into a 600px slot. The visitor downloads the full file either way.&lt;/p&gt;

&lt;p&gt;Shopify serves images through a CDN and can resize them on the fly if you ask for a size in Liquid. Instead of outputting the raw image URL, request the size you actually need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&amp;lt;img
  src="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;featured_image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"
  alt="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;featured_image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;alt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;escape&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"
  width="800"
  height="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;divided_by&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;featured_image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;aspect_ratio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"
&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Always include &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; attributes. They let the browser reserve the right amount of space before the image loads, which stops the page from jumping around as images arrive.&lt;/p&gt;

&lt;p&gt;For collection grids and other places where the display size changes between mobile and desktop, use &lt;code&gt;srcset&lt;/code&gt; so the browser can pick an appropriate file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&amp;lt;img
  src="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"
  srcset="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt; 400w,
          &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt; 600w,
          &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;900&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt; 900w"
  sizes="(max-width: 749px) 100vw, 600px"
  alt="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;alt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;escape&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"
  loading="lazy"
  width="600"
  height="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;divided_by&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;aspect_ratio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"
&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The newer &lt;code&gt;image_tag&lt;/code&gt; filter can generate much of this for you, and it is worth reaching for in new sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;featured_image&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;900&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_tag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'lazy'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;widths&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'400, 600, 900'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Lazy load everything below the fold, and nothing above it
&lt;/h2&gt;

&lt;p&gt;Lazy loading tells the browser to delay an image until the visitor is about to scroll to it. That is exactly what you want for collection grids, lookbooks, testimonials, and anything else below the first screen.&lt;/p&gt;

&lt;p&gt;The rule I follow: the first visible image, usually the hero or the main product image, should load eagerly. Everything else gets &lt;code&gt;loading="lazy"&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;forloop.first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
  &lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;assign&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loading_attr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'eager'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
  &lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;assign&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loading_attr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'lazy'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endif&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;

&amp;lt;img src="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;image_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;" loading="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loading_attr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;" alt="&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;alt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;escape&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lazy loading the hero image by mistake is an easy way to make a store feel slower, because the browser waits instead of fetching the most important image right away. For that hero image, you can also add &lt;code&gt;fetchpriority="high"&lt;/code&gt; to tell the browser it matters most:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;fetchpriority=&lt;/span&gt;&lt;span class="s"&gt;"high"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same thinking applies to iframes. An embedded video or map below the fold should carry &lt;code&gt;loading="lazy"&lt;/code&gt; too.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Load fonts without blocking the page
&lt;/h2&gt;

&lt;p&gt;Custom fonts are part of a brand, but a font file the browser insists on loading before showing any text will make even a light page feel slow. If you self host fonts or load them in the theme, a few small changes help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;font-display: swap&lt;/code&gt; in your &lt;code&gt;@font-face&lt;/code&gt; rules so the browser shows fallback text first and swaps in the brand font when it arrives, instead of showing nothing.&lt;/li&gt;
&lt;li&gt;Preload only the one or two font files used above the fold, and only in the format modern browsers need, usually woff2.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"preload"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"{{ 'brand-font.woff2' | asset_url }}"&lt;/span&gt; &lt;span class="na"&gt;as=&lt;/span&gt;&lt;span class="s"&gt;"font"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"font/woff2"&lt;/span&gt; &lt;span class="na"&gt;crossorigin&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Preloading every weight and style defeats the point. Preload the regular weight used in headings or body text, and let the rest load normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Defer JavaScript that is not needed immediately
&lt;/h2&gt;

&lt;p&gt;Theme JavaScript that runs sliders, drawers, and announcement bars does not all need to block the first render. If your theme loads custom scripts in &lt;code&gt;theme.liquid&lt;/code&gt;, add &lt;code&gt;defer&lt;/code&gt; where the script does not need to run before the page content appears:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"{{ 'theme.js' | asset_url }}"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Be careful with this one. Scripts that other inline code depends on can break if their order changes, so test the cart drawer, search, and product forms after any change. A safe pattern is to defer your own theme scripts and leave anything a critical inline snippet depends on until you can refactor the pair together.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple order of operations
&lt;/h2&gt;

&lt;p&gt;If you are looking at a slow store and do not know where to start, this is the sequence I use:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Audit app scripts in the page source and remove what is unused.&lt;/li&gt;
&lt;li&gt;Fix image sizes and add width and height attributes in your templates.&lt;/li&gt;
&lt;li&gt;Lazy load below the fold images and iframes, keep the hero eager.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;font-display: swap&lt;/code&gt; and preload only the main font file.&lt;/li&gt;
&lt;li&gt;Defer non critical theme JavaScript, then test the interactive pieces.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each step is small, reversible, and testable on a duplicate theme before it goes live. That is the part I would stress: duplicate the theme, make one change at a time, preview it, and check the pages your customers actually use, especially product pages and the cart. Speed work done carelessly can break the parts of a store that make money, and a careful hour in the theme code usually beats a new app install promising to do it all for you.&lt;/p&gt;




&lt;p&gt;I am abi, a Shopify and full-stack developer (React, Next.js) based in Dhaka and working with clients worldwide. I build stores and web apps for brands and agencies, and I offer white-label development for agencies that need a dev partner behind their brand. You can see my work at &lt;a href="https://abdullah.itservicesbd.com/" rel="noopener noreferrer"&gt;https://abdullah.itservicesbd.com/&lt;/a&gt; or book a short call at &lt;a href="https://calendly.com/mdabdullah-dev/30min" rel="noopener noreferrer"&gt;https://calendly.com/mdabdullah-dev/30min&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
