So I\'ve recently learned that putting your js at the bottom of the DOM is antiquated, and that I should be once again putting them in the with the “as
It's quite simple. You should use [async]
for scripts which can be executed in any order, and [defer]
for scripts which have to be executed after HTML is parsed.
For example, if you have a script that add social sharing icons next to your posts, and this script doesn't rely on any other script, you can use both [async]
and [defer]
. But if your scripts requires jQuery, you can't use [async]
, because if you do, it might turn out that it gets executed before jQuery is loaded and it breaks.
If all your scripts require jQuery, then you shouldn't use [async]
at all. As for [defer]
, it depends on whether your scripts access DOM. For plugins it probably doesn't matter, but you'll probably need it for your own code.
If you wrap your scripts in $(document).ready();
, you can use [defer]
for scripts which don't have immediate effect (e.g. require user interaction).