J'ai fait quelques projets basés sur le Web, mais je ne pense pas trop à la séquence de chargement et d'exécution d'une page Web ordinaire. Mais maintenant, j'ai besoin de connaître les détails. Il est difficile de trouver des réponses de Google ou SO, j'ai donc créé cette question.
Un exemple de page est comme ceci:
<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<script src="abc.js" type="text/javascript">
</script>
<link rel="stylesheets" type="text/css" href="abc.css"></link>
<style>h2{font-wight:bold;}</style>
<script>
$(document).ready(function(){
$("#img").attr("src", "kkk.png");
});
</script>
</head>
<body>
<img id="img" src="abc.jpg" style="width:400px;height:300px;"/>
<script src="kkk.js" type="text/javascript"></script>
</body>
</html>
Donc, voici mes questions:
- Comment se charge cette page?
- Quelle est la séquence du chargement?
- Quand le code JS est-il exécuté? (en ligne et externe)
- Quand le CSS est-il exécuté (appliqué)?
- Quand $ (document) est-il déjà exécuté?
- Abc.jpg sera-t-il téléchargé? Ou s'agit-il simplement de télécharger kkk.png?
J'ai la compréhension suivante:
- Le navigateur charge le html (DOM) dans un premier temps.
- Le navigateur commence à charger les ressources externes de haut en bas, ligne par ligne.
- Si a
<script>
est rencontré, le chargement sera bloqué et attendra que le fichier JS soit chargé et exécuté, puis continuez. - D'autres ressources (CSS / images) sont chargées en parallèle et exécutées si nécessaire (comme CSS).
Ou est-ce comme ça:
Le navigateur analyse le html (DOM) et obtient les ressources externes dans un tableau ou une structure de type pile. Une fois le html chargé, le navigateur commence à charger les ressources externes dans la structure en parallèle et à exécuter, jusqu'à ce que toutes les ressources soient chargées. Ensuite, le DOM sera modifié en fonction des comportements de l'utilisateur en fonction du JS.
Quelqu'un peut-il donner une explication détaillée de ce qui se passe lorsque vous avez la réponse d'une page html? Cela varie-t-il dans différents navigateurs? Une référence à cette question?
Merci.
ÉDITER:
J'ai fait une expérience dans Firefox avec Firebug. Et cela apparaît comme l'image suivante: