Rafael Corrêa Gomes

JS defer vs async

When optimizing your website’s performance by leveraging JavaScript, using the right loading strategy is paramount. Two commonly used attributes, async and defer, offer distinct methods for including JavaScript files in your web pages. In this article, we’ll delve into the differences between these two techniques, exploring their benefits and potential downsides to help you decide which approach best suits your needs.

Defer: Delayed but Organized Execution

The defer attribute offers an effective way to enhance page loading speed by optimizing the sequence in which JavaScript files are loaded and executed. Here’s how it works:

  1. Background Loading: When you use the defer attribute, the associated JavaScript file is loaded asynchronously in the background while the browser parses the HTML and constructs the DOM.
  2. DOM-Friendly: One of the primary advantages of defer is that it doesn’t block the DOM construction. The script is executed only after the entire DOM has been built, which ensures a smooth user experience.
  3. Execution Timing: Although defer scripts load asynchronously, they maintain their original order of execution as listed in the HTML document. These scripts are executed in the order they appear in the DOM.
  4. DOM Load: The DOM load event waits until all deferred scripts are downloaded and executed, ensuring that the webpage is fully functional before scripts are run.
  5. External Scripts: The defer attribute is typically applied to external scripts and helps improve the performance of pages containing large or complex scripts.

Async: Independent and Immediate Execution

The async attribute introduces a different loading strategy that offers unique benefits for specific scenarios:

  1. Independence: Unlike defer, async loads scripts in parallel with other page elements, but it does not wait for other scripts or the DOM to be fully loaded before executing. This makes it particularly useful for third-party scripts not tightly coupled to your site’s functionality.
  2. Immediate Execution: Scripts marked with async are executed immediately after downloading, even if the DOM is not yet ready. This can lead to potential issues if the script relies on DOM elements that haven’t been constructed yet.
  3. Third-Party Integration: async is an excellent choice for integrating third-party components such as ads, analytics, and counters. These elements often operate independently from the rest of your page’s functionality.
async vs defer comparation table

Choosing the Right Approach

While both defer and async offer benefits. It’s crucial to select the appropriate strategy based on your website’s requirements:

  • Use Defer: To ensure that your JavaScript doesn’t interfere with the DOM construction and needs to be executed in a specific order. This is particularly useful for scripts that modify or interact with the DOM.
  • Use Async: Integrating self-contained third-party scripts that do not require a fully loaded DOM. This is great for scenarios where scripts don’t need to wait for one another or for the DOM to be ready.
async vs defer execution

Conclusion

Optimizing the performance of your website involves making informed decisions about how you include and execute JavaScript. The choice between async and defer depends on the nature of your scripts and your specific performance goals. By understanding the differences and considering the benefits and downsides of each approach, you can ensure that your website loads efficiently and delivers a seamless user experience.

Check out my other posts for interesting architecture articles. Images from the page speed checklist website.

About me

Rafael Corrêa Gomes

Rafael Corrêa Gomes

Senior e-commerce developer and architect based in Montreal, Canada. More than ten years of experience developing e-commerces, saas products and managing teams working with Magento, Shopify, PHP, JavaScript, and NodeJS.