Je sais, par exemple, que lorsque Chrome télécharge un fichier JavaScript, il est interprété et jité. P>
Ma question est, quand IE6,7,8, téléchargez d'abord un fichier JavaScript, est la chose entière analysée et interprétée? P>
Ma compréhension était que seules les signatures de fonction de haut niveau et que tout ce qui soit exécuté dans la portée mondiale a été analysée sur la charge. Puis les organes de fonction et le reste ont été analysés sur l'exécution. P>
S'ils sont complètement analysés sur la charge, que pensez-vous que les économies de temps seraient sur le report des organes de fonction à être téléchargés et analysés plus tard? P>
4 Réponses :
Ils sont complètement analysés sur la charge. (C'est-à-dire qu'il faut analyser le script pour savoir où chaque corps de fonction se termine, bien sûr.) Dans les implémentations à source ouverte, chaque fonction est compilée à la même heure et même au code de la machine en même temps, et j'imagine que c'est-à-dire fonctionne de la même manière. . P>
Si vous avez une page en train de charger trop lentement, vous pouvez différer Chargement de 100k de script que vous n'allez probablement pas utiliser, cela pourrait aider vos temps de charge. Ou ne pas voir la mise à jour ci-dessous. P>
(Trivia: Les repères JS comme SunSpider ne mesurent généralement pas le temps nécessaire pour analyser et compiler le code.) P>
Le code source SPiderMonkey est ici . Notez que la classe d'analyse est un modèle qui peut produire une AST, pour la compilation immédiate ( analyseur
Parser
JS :: frontend :: compilelazunction code> est appelé.
Oui, sur tous les navigateurs Le téléchargement de la ressource bloque tout le reste de la page (téléchargement de CSS, autres téléchargements JS, rendu) S'il est fait avec un
Petit Nitpick, Ehm Je veux dire Correction: V8 JAMAIS I> interprète, c'est TOUJOURS i> compile au code natif. Il n'est même pas I> d'un interprète, seulement un compilateur de code natif.
@ Jörg W Mittag Oui, je suppose que je suppose: analyser / interpréter / exécuter. Ces deux sont essentiellement les mêmes: interpréter / exécuter