What’s the difference between async vs defer attributes

Posted: 08 March 2018, Category: Coding

What's the difference between async vs defer attributes

According to https://caniuse.com/ website, async and defer attributes for the <script> element have great support and I think it might be a good time to learn what they do and how to use them.

JavaScript is considered a "parser blocking resource" causing blocking of HTML parsing. Thankfully, the latest technologies such as HTML5 gives you 3 ways to tell browser when to run JavaScript code.


  <script src="myscript.js"></script>

The HTML is parsed until the <script> tag is reached. At that point, parsing of HTML is blocked and a request is made to fetch the script file. Once the script is executed, HTML parsing resumes again.

<script async>

  <script async src="myscript.js"></script>

With async (asynchronous) attribute, the HTML is parsed while the browser loads and execute the script at the same time. The script execution can happen whenever the script becomes ready (potentially before HTML parsing completes) after being fetched in parallel with the document parsing.

<script defer>

  <script defer src="myscript.js"></script>

With defer attribute in place, the script file is downloaded in parallel while the HTML document is still parsing. However, even if the script file is fully downloaded long before the document is finished HTML parsing, the script is not executed until the HTML parsing is complete.

Note: The async and defer attrib­utes are ignored for scripts that have no src attribute.


Use async attribute if the content of page does not rely on any scripts.

Use defer attribute if the content of page rely on script as you want to trigger this script when HTML is fully loaded.


The current trend is to put scripts in the <head> tag and use the async or defer attributes as this allows your scripts to be downloaded asap without blocking your browser.

If you prefer to go with plain <script> tag only, make sure to put it at the bottom before closing </body> tag as this ensures the HTML parser isn't blocked until the very end.


Back to Blog page

Blog categories

Twitter feed

(8 days ago)
RT @Netlify: ⚡️Announcing that we have raised an additional $30m led by @kpcb’s Mamoon Hamid, with @a16z and the founders of @SlackHQ @Yelp…

(16 days ago)
CSS Filter Playground https://t.co/ZOl7SOGI5S

(16 days ago)
“5 steps to speed up your image heavy website” by @BrandonMorelli https://t.co/UE1G7EQjlQ

(21 days ago)
“How browser rendering works — behind the scenes” by @OhansEmmanuel https://t.co/NJY1YzEgU4

Top of page