Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/05/2011, 18h19   #1
Candidat au titre de Membre du Club
 
Homme
Développeur Web
Inscription : mars 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mars 2009
Messages : 22
Points : 13
Points : 13
Par défaut Mais comment le moteur javascript charge-t-il le code ?

Bonjour,

Quelqu'un pourrait-il m'expliquer, ou me diriger vers l'explication, comment le moteur javascript charge le code puis execute celui-ci?

Ce que je sais pour le moment est que le code peux s'exécuter à deux moment:
1) quand le document est prêt (tout le code est chargé mais pas toutes les ressources telles les images)
2) toute la page (window) est prête (le code et les ressources sont chargés)

Mais que se passe t'il avant?

Un exemple de mon incompréhension est le code suivante:
Code :
1
2
3
4
 
(function(leParametre){
 mon code ici
})(monParametre);
ou simplement

Code :
1
2
 
(function(){ mon code ici })();
Ceci est régulièrement utilisé avec jQuery...


On me dit que cela est utilisé (éxécuté?!) lors du chargement du code. Personellement je pense que cela se ferait au document ready, mais je n'en sais rien.

Y a t'il d'autre "moment" dans le "page loading process" ?

Merci d'avance pour toute explication.
FDussault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 18h42   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 803
Points : 35 803
Citation:
1) quand le document est prêt (tout le code est chargé mais pas toutes les ressources telles les images)
2) toute la page (window) est prête (le code et les ressources sont chargés)


En fait, le navigateur possède un interpréteur HTML et un interpréteur JavaScript.
Pendant que la page se crée, si l'interpréteur HTML rencontre une balise <script>, il donne la main à l'interpréteur JavaScript et attend bien sagement.
Le moteur JavaScript charge (si besoin) le script, le compile et l'interprète, éventuellement lance des message s'il rencontre des erreurs de syntaxe, si le script comporte du code en dehors d'une fonction, ce code est exécuté. Ensuite il rend la main à l'interpréteur HTML.

Le code est donc chargé au moment où il est trouvé dans la page et c'est dans la partie hors fonction que sont généralement placés les gestionnaires d'événements onload, onDOMReady etc. qui servent à jQuery par exemple à pouvoir s'exécuter quand la page est prête.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 18h45   #3
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 018
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 018
Points : 45 108
Points : 45 108
Je pense qu'il y a une petite confusion...
Tu dois parler de ce type de code:

Code :
$(function(){ mon code ici });
En jquery $() est un réaccourci pour $(document).ready()

sinon pour lancer une fonction il suffit de l'appeler par son nom suivi de () contenant eventuellement des paramètres.
Ce qui entraine la possibilité d'un execution immediate de la fonction comem suit au moment de l'interprétation du code

Code :
(function(foo){alert(foo)})('hello')
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 19h03   #4
Candidat au titre de Membre du Club
 
Homme
Développeur Web
Inscription : mars 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mars 2009
Messages : 22
Points : 13
Points : 13
Je fais bien reférence à
Code :
1
2
 
(function(foo){alert(foo)})('hello')
Donc si je vous suis bien, le code javascript est executé (si exécutable, tel le code ci-haut) au moment où il est rencontré lors du chargement de la page.

Merci beaucoup!


EDIT:
Je comprends que jQuery attend que onDOMReady ou onLoad soient déclanchés.

Par curiosité, quels sont les autres événements déclenchés dans le processus de chargement?
FDussault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 20h54   #5
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
l'interprète Javascript est en fait une machine virtuelle avec un compilateur.
le moment où le code va être exécuté dépend de l'attribut defered.
quoi qu'il arrive la première chose c'est le chargement du code source. même s'il est defered le compilateur s'il dispose de temps vas prècompiler le code.
il vas référencer des élément du code sans pour autant les compiler complètement. par exemple pour une définition de fonction il va référencer la fonction sans en compiler le code.
si la balise n'est pas defered il exécute le code et compile à la volée les fonctions utilisées.
si le code est défered il continue avec les balise suivantes.
ensuite il exécute dans l'ordre d'apparition les scripts defered.
la page fini de se charger et le gestionnaire d'événement entre en jeux.
s'éxécute alors dans le désordre (c'est le moteur qui décide) tous les handler liés à chaque événements.

en clair les listeners associés à un événement sont tous exécuté avant de passé à l'événement suivant. mais l'ordre des listeneur de cet événement n'est pas garanti.

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 21h03   #6
Candidat au titre de Membre du Club
 
Homme
Développeur Web
Inscription : mars 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mars 2009
Messages : 22
Points : 13
Points : 13
Merci sekaijin !


Je met le thread à résolu mais je continuerai à recevoir vos réponse. :-)
FDussault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 21h25   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 803
Points : 35 803
sekaijin : defer n'est pas cross-browser comme attribut
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 10h24   #8
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
W3C =>
http://www.la-grange.net/w3c/html4.0....html#h-18.2.1

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h12.


 
 
 
 
Partenaires

Hébergement Web