Hint
Both avoid blocking HTML parsing β async executes ASAP, defer after full parse
By default, <script> blocks HTML parsing while downloading and executing.
| Attribute | Download | Executes when | Order |
|---|---|---|---|
| None (default) | Blocks HTML | Immediately, blocks | In order |
| async | Parallel | As soon as downloaded | NOT guaranteed |
| defer | Parallel | After HTML fully parsed | In document order |
<!-- Blocks parsing β (put in <head>) -->
<script src="app.js"></script>
<!-- Parallel download, executes ASAP when downloaded -->
<!-- ORDER NOT GUARANTEED β analytics.js might run before vendor.js -->
<script async src="analytics.js"></script>
<!-- Parallel download, runs after HTML parsed, IN ORDER β
-->
<script defer src="vendor.js"></script>
<script defer src="app.js"></script>
<!-- app.js always runs after vendor.js -->
When to use: