C’est quasi similaire à document.addEventListener("DOMContentLoaded"; function () {}) sauf qu’un script avec defer est appelé juste avant que l’event soit lancé.
Personnellement, je lance mon code en load (après DOMContentLoaded et defer) pour attendre que les images et les feuilles de style soit chargé, il y a donc aucun intérêt que j’utilise defer.
J’aurais tendance à utiliser document.addEventListener("DOMContentLoaded"; function () {}) pour les raisons suivantes :
Pour éviter une étourderie (comme oublier de rajouter defer) car defer n’est visible que dans ton fichier HTML, tu ne verras dans ton fichier JS que tu attends/utilises DOMContentLoaded ;
J’ai tendance à compresser tous mes fichier JS en un seul fichier, appliquer defer sur tout mon code dans du code qui ne nécessite pas defer, me dérange.
En tout cas, il vaut toujours mieux ajouter defer ou async afin de ne pas ralentir le parsing de la page par le téléchargement du script.
Le seul impact de defer dans script, c’est que le navigateur va attendre que le DOM (-> code HTML de la page) ait fini d’être traité (lu) au lieu d’être exécuté immédiatement (quand le fichier en src a été téléchargé entièrement).
Il faut être prudent quand tu utilises async, le navigateur ne respectera pas l’ordre des balises SCRIPT, il peut charger le dernier fichier en premièr, selon la conception du code ceci peut-être problématique (assure toi que ton code le permet et de comprendre la différence, avant de l’utiliser).
Oui, de reporter l’exécution du script. Ce qui implique de ne pas devoir attendre qu’il soit télécharger pour continuer le parsing. Ce qui implique un gain de performance là plupart du temps.
Autrement, le parser attend le téléchargement du script, exécute le script et reprend le traitement du fichier HTML. Avec defer, le parser télécharge le script et en même temps continue le traitement du fichier HTML. Quand il a fini, si le script à fini de se télécharger, il l’exécute, sinon il attend encore qu’il ai fini de se télécharger puis l’exécute.
En règle générale, mieux vaut mettre defer. async, c’est pour des cas particuliers où tu es sûr que l’exécution du script ne ralentit pas ou peu le traitement du DOM. Un autre cas, est celui d’un gros script lent à télécharger. Tu ne l’exécutes que quand il est prêt, mais tu sais que script charger avec defer vont s’exécuter avant. C’est assez crade, mieux vaut utiliser defer et le charger en dernier, voir le charger dynamiquement.
Niveau opti ça serait une aberration si l’exécution du script, agissait sur le temps de téléchargement de la page. Je viens de vérifier, l’exécution du script n’agit pas sur le téléchargement :
Niveau opti ça serait une aberration si l’exécution du script, agissait sur le temps de téléchargement de la page. Je viens de vérifier, l’exécution du script n’agit pas sur le téléchargement :
Mais ce n’est pas ce que j’ai dis ! Ce que j’ai dis, c’est que ça agissait sur le parsing (et pas le téléchargement) de la page !
Le header Done ne s’affiche qu’au bout de 5s (j’ai augmenté de 3s afin que ce soit net). Ce qui signifie que le fichier test.js a été téléchargé (donc le parser a attendu la fin du téléchargement du fichier) et exécuté (le parser a attendu la fin de l’exécution) puis enfin il a continué le parsing de la page.
Bref, des tests comme cela n’ont que très peu de valeur. Surtout quand ils sont mal réalisés.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte