Clientlibs are the way in AEM to serve CSS and/or JavaScript. The JavaScript can only be printed as a regular <script->tag.
This Jetpack library allows you to load JavaScript async or defer.
The output by using this library can be:
<script type="text/javascript" src="/etc.clientlibs/brand/clientlibs/test.min.js" defer></script>
<script type="text/javascript" src="/etc.clientlibs/brand/clientlibs/test.min.js" async></script>
Don't load the regular clientlib.html, but load this custom one. An option can be provided when calling the template. The value of this option can be 'defer' or 'async'.
<sly data-sly-use.clientLib="/apps/granite/sightly/templates/clientlib.html"
data-sly-call="${clientlib.js @ categories='brand.test', option='defer'}"/>
or
<sly data-sly-use.clientLib="/apps/granite/sightly/templates/clientlib.html"
data-sly-call="${clientlib.js @ categories='brand.test', option='async'}"/>