En JavaScript, l'utilisation de "async defer" a-t-elle une utilité lorsque le script et tout en bas d'une page html ?

1 réponse

Évaluation
  • oyubir
    Lv 6
    il y a 4 mois
    Réponse favorite

    La réponse courte est : "non, si le but est juste de s'assurer que la page est chargée avant que le script soit exécuté".

    "async defer" c'est pas un mot clé, mais 2. Qui veulent dire 2 choses différentes.

    "defer" veut dire "déplace à la fin — mais commence à charger le script, qui ne sera exécuté qu'à la fin, dès maintenant".

    Donc si on est déjà à la fin...

    C'est plus entre "vaut-il mieux mettre le script à la fin ou au début avec un defer" qu'il y a débat.

    La différence théorique est que si le script est au début, avec un "defer", son téléchargement commence déjà. C'est son exécution qui est différée. Et quand ce sera son tour, le script sera peut être déjà téléchargé, ce qui est du temps de gagné, par rapport à si le script était téléchargé seulement quand son tour arrive.

    Dans la pratique, tous les navigateurs commencent déjà à télécharger les scripts, même ceux à la fin, dès le début.

    "async" veut dire que le navigateur n'attend pas que le script soit téléchargé et exécuté avant de continuer la suite de la page.

    Ce qu'il faudrait normalement faire, puisque le script peut très bien avoir modifié la page.

    Avec "async", le téléchargement du script est lancé, la page continue à se charger pendant ce temps là. Et le script sera exécuté dès qu'il sera prêt (peu importe où on en est du reste).

    Sur un script en début de page, même si la signification est différente, l'effet est similaire : la page continue de se charger (et de s'afficher) en parallèle avec le chargement du script.

    Et plus tard, le script s'exécutera une fois prêt, dans le contexte du moment (avec les éléments de page qui se sont chargés entre temps).

    Ce qui est aussi pile ce qui arrive en pratique quand on met le script à la fin : la page se charge et s'affiche déjà (forcément, puisque il n'y a même pas encore de script à attendre en théorie) en parallèle avec le chargement du script (qui est chargé à l'avance par le navigateur, même si c'est pas encore son tour).

    Et le script s'exécute à la fin, dans le contexte où la page est déjà chargée et affichée.

    La grosse différence avec async quand même, c'est que async s'exécute quand il est prêt. Donc pas forcément à la fin (en pratique si), et surtout pas forcément dans l'ordre (et en pratique, pas dans l'ordre)

Vous avez d’autres questions ? Pour obtenir des réponses, posez vos questions dès maintenant.