Comment faire des programmes Web avantage efficaces est un problème que je considérerai inconsciemment chaque fois que je fais un développement frontal. Il y a quelques années, The Awesome Front-end Engineers de Yahoo a publié un livre sur l'amélioration des performances du Front-end Web, ce qui a provoqué une sensation dans l'ensemble de l'industrie de la technologie de développement Web, ce qui rend la mystérieuse question d'optimisation frontale Web à laquelle un chou sur la rue peut répondre. Lorsque toute l'industrie connaît la réponse au secret choquant, la technologie d'optimisation existante ne peut plus produire un saut qualitatif pour le site Web que vous développez. Afin de rendre les performances du site Web, nous développons mieux que les sites Web des autres, nous devons réfléchir plus profondément et réserver de meilleures compétences.
Le système d'événements en JavaScript est le premier point de percée auquel je pense. Pourquoi est-ce un système d'événements JavaScript? Nous savons tous que le Web frontal contient trois technologies: HTML, CSS et JavaScript. Il est clair comment HTML et CSS sont combinés: style, classe, ID et balises HTML. Il n'y a rien à dire, mais comment JavaScript entre au milieu entre HTML et CSS et permet aux trois de s'intégrer? Enfin, j'ai trouvé que ce point d'entrée est le système d'événements de JavaScript. Peu importe la durée du code JavaScript complexe que nous écrivons, il est finalement reflété dans HTML et CSS via le système d'événements. Par conséquent, je pensais que puisque le système d'événements est le point d'entrée de l'intégration des trois, il y aura inévitablement un grand nombre d'opérations d'événements dans une page, en particulier dans les pages Web de plus en plus complexes d'aujourd'hui. Sans ces événements, le code JavaScript que nous avons soigneusement écrit ne peut être utilisé que dans la bibliothèque, et les héros sont inutiles. Puisqu'il y a un grand nombre de fonctions d'événements sur la page, y aura-t-il des problèmes qui affectent l'efficacité lors de la rédaction de fonctions d'événements comme nous le sommes habitués? La réponse que j'ai étudiée est qu'il s'agit d'un véritable problème d'efficacité, et c'est aussi un grave problème d'efficacité.
Afin de clarifier ma réponse, je veux expliquer en détail le système d'événements de JavaScript.
Le système d'événements est le point d'entrée de la fusion de JavaScript, HTML et CSS. Ce point est comme la fonction principale de Java. Toute magie commence ici. Alors, comment le navigateur termine-t-il cette entrée? J'ai étudié trois façons, ils sont:
Méthode 1: traitement des événements HTML
Le traitement des événements HTML consiste à écrire des fonctions d'événement directement dans la balise HTML. Parce que cette méthode d'écriture est étroitement couplée à la balise HTML, elle est appelée traitement des événements HTML. Par exemple, le code suivant:
La copie de code est la suivante:
<entrée type = "bouton" id = "btn" name = "btn" onclick = "alert ('cliquez moi!')" />
Si la fonction d'événement de clic est compliquée, l'écriture de code comme celle-ci provoquera certainement des inconvénients. Par conséquent, nous écrivons souvent la fonction à l'extérieur et ONClick appelons directement le nom de la fonction, par exemple:
La copie de code est la suivante:
<input type = "Button" id = "btn" name = "btn" onclick = "btnclk ()" />
fonction btnclk () {
alert ("Cliquez sur moi!");
}
La méthode d'écriture ci-dessus est une très belle méthode d'écriture, donc beaucoup de gens l'utiliseront inconsciemment de nos jours, mais beaucoup de gens ne savent peut-être pas que cette dernière méthode d'écriture n'est en fait pas aussi forte que la première méthode d'écriture. C'est également un problème que j'ai rencontré lors de l'étude de la technologie du script de chargement non bloquant il n'y a pas longtemps, car selon le principe de l'optimisation frontale, le code JavaScript est souvent situé en bas de la page. Lorsque la page est bloquée par un script, la fonction référencée dans la balise HTML n'a peut-être pas encore été exécutée. À l'heure actuelle, nous cliquons sur le bouton de la page et le résultat sera signalé "La fonction XXX est une erreur non définie". En JavaScript, de telles erreurs seront prises par essayer et attraper. Par conséquent, afin de rendre le code plus robuste, nous aurons les réécritures suivantes:
La copie de code est la suivante:
<input type = "Button" id = "btn" name = "btn" onclick = "try {btnclk ();} catch (e) {}" />
Voir le code ci-dessus n'est pas quelque chose qui peut être décrit par une personne dégoûtante.
Méthode 2: Traitement d'événements de niveau DOM0
Le traitement des événements de niveau DOM0 est un traitement d'événements pris en charge par tous les navigateurs aujourd'hui. Il n'y a pas de problème de compatibilité. Voir une telle phrase rendra tous ceux qui font un web frontal excité. La règle pour le traitement des événements DOM0 est: chaque élément DOM a son propre attribut de traitement d'événement, qui peut se voir attribuer une fonction, comme le code suivant:
La copie de code est la suivante:
var btndom = document.getElementById ("btn");
btndom.onclick = function () {
alert ("Cliquez sur moi!");
}
Les attributs d'événements gérés par les événements de niveau DOM0 sont définis sous la forme de "ON + Nom de l'événement", et l'attribut entier est dans les lettres minuscules. Nous savons que l'élément DOM est un objet JavaScript dans le code JavaScript, il est donc très facile de comprendre le traitement d'événement de niveau DOM0 du point de vue de l'objet JavaScript, par exemple, le code suivant:
La copie de code est la suivante:
btndom.onclick = null;
Ensuite, l'événement de clic du bouton est annulé.
Regardons le code suivant:
La copie de code est la suivante:
btndom.onclick = function () {
alert ("Cliquez sur moi!");
}
btndom.onclick = function () {
alert ("cliquez sur me1111!");
}
La fonction suivante écrasera la première fonction.
Méthode 3: traitement des événements DOM2 et traitement d'événements IE
Le traitement des événements DOM2 est une solution de traitement d'événements standardisé, mais IE Browser a développé un ensemble de fonctions et les fonctions sont similaires au traitement des événements DOM2, mais le code est différent de cela.
Avant d'expliquer la méthode trois, je dois ajouter des concepts, sinon je ne pourrai pas expliquer la connotation de la méthode trois.
Le premier concept est: flux d'événements
Dans le développement de pages, nous rencontrons souvent cette situation. L'intervalle de travail d'une page peut être représenté par un document en JavaScript. Il y a un div sur la page. Le div équivaut à superposer l'élément de document. Il y a un élément de bouton dans la div. L'élément de bouton recouvre le div, ce qui équivaut également à la superposition du document. Le problème est donc que lorsque nous cliquons sur ce bouton, ce comportement de clics se produit non seulement sur le bouton. Le DIV et le document sont utilisés pour les opérations de clic. Selon la logique, ces trois éléments peuvent déclencher des événements de clic. Le flux d'événements décrit le concept du scénario ci-dessus. Le flux d'événements signifie: l'ordre des événements reçus de la page.
Le deuxième concept: bulles d'événements et capture d'événements
Les bulles d'événements sont la solution proposée par Microsoft pour résoudre le problème du flux d'événements, tandis que la capture d'événements est la solution d'écoulement d'événements proposée par Netscape. Leurs principes sont les suivants:
L'événement bouillonnant commence par une div, suivi d'un corps, et enfin un document, et la capture de l'événement est inversée, d'abord un document, suivie d'un corps, et enfin d'un élément cible Div. En revanche, la solution de Microsoft est plus humaine et conforme aux habitudes de fonctionnement des gens, la solution de Netscape est très gênante. C'est la conséquence de la guerre du navigateur. Netscape est plus lent et résout le problème du flux d'événements en sacrifiant le code auquel les utilisateurs sont habitués.
Microsoft a conçu un nouveau système d'événements en combinaison avec des événements de bulles, qui est communément appelé traitement d'événements IE dans l'industrie. La méthode du traitement des événements IE est comme indiqué dans le code suivant:
La copie de code est la suivante:
var btndom = document.getElementById ("btn");
btndom.attachevent ("onclick", function () {
alert ("Cliquez sur moi!");
});
Ajoutez des événements via la méthode attachement de l'élément DOM sous IE. Par rapport au traitement des événements DOM0, la méthode d'ajout d'événements est passée des attributs aux méthodes, donc lorsque nous ajoutons des événements, nous devons transmettre des paramètres dans la méthode. La méthode attachementEvent reçoit deux paramètres. Le premier paramètre est le type d'événement. La dénomination du type d'événement est la même que la dénomination de l'événement dans le traitement de l'événement DOM0. Le deuxième paramètre est la fonction d'événement. L'avantage de l'utilisation de la méthode est que si nous ajoutons un événement de clic au même élément, comme indiqué ci-dessous:
La copie de code est la suivante:
btndom.attachevent ("onclick", function () {
alert ("Cliquez sur moi!");
});
btndom.attachevent ("onclick", function () {
alert ("cliquez sur moi aussi!");
});
Exécutez-le, les deux boîtes de dialogue apparaissent normalement, ce qui nous permet d'ajouter plusieurs événements de clic différents à l'élément DOM. Et si nous ne voulons pas d'événement? Que devons-nous faire? Je fournis une méthode de détachette pour supprimer les événements. La liste des paramètres est la même que la pièce jointe. Si nous voulons supprimer un certain événement de clic, passez simplement les mêmes paramètres que l'événement ADD, comme indiqué dans le code suivant:
La copie de code est la suivante:
btndom.detachevent ("onclick", function () {
alert ("cliquez sur moi aussi!");
});
Lorsque vous l'exécutez, les conséquences sont très graves et nous sommes confus. Le deuxième clic n'a pas été supprimé. Que se passe-t-il? J'ai mentionné plus tôt que la suppression des événements nécessite des paramètres de passage comme l'ajout d'événements. Cependant, dans la fonction anonyme de JavaScript, même si le code des deux fonctions anonymes est exactement le même, JavaScript utilisera différentes variables pour les stocker en interne. En conséquence, le phénomène que nous voyons ne peut pas supprimer l'événement de clic, donc notre code doit être écrit comme ceci:
La copie de code est la suivante:
var ftn = fonction () {
alert ("cliquez sur moi aussi!");
};
btndom.attachevent ("onclick", ftn);
btndom.detachevent ("onclick", ftn);
La méthode ajoutée et la méthode supprimée de cette manière pointent vers le même objet, donc l'événement a supprimé avec succès. Le scénario nous dit ici que nous devons avoir une bonne habitude d'écrire des événements que nous devons définir les opérations indépendamment et ne pas utiliser les fonctions anonymes comme une habitude.
Ensuite, le traitement des événements DOM2, son principe est illustré dans la figure ci-dessous:
DOM2 est un événement standardisé. En utilisant les événements DOM2, la livraison des événements commence à partir de la méthode de capture, c'est-à-dire du document, puis du corps. La div est un point intermédiaire. Lorsque l'événement atteint le point intermédiaire, l'événement est au stade cible. Une fois que l'événement est entré dans le stade cible, l'événement commence à bouillonner et à gérer, et finalement l'événement se termine sur le document. (Je pointe de documentation dans cet article, mais la situation réelle est que certains navigateurs commenceront à capturer l'événement et à mettre fin à la bulle dans la fenêtre. Cependant, je pense que peu importe comment le navigateur lui-même est défini pendant le développement, il est plus axé sur le développement pour prêter attention au document, donc j'utilise un document ici). Les gens sont utilisés pour classer le stade cible dans le cadre de la bulle, principalement parce que les événements de bulle sont plus largement utilisés dans le développement.
Le traitement des événements DOM2 est très difficile. Lorsque chaque événement est déclenché, tous les éléments seront traversés deux fois. Par rapport à l'événement IE, la performance est bien pire que l'événement IE. Je ne fais que bouillonner, donc je n'ai besoin de traverser qu'une seule fois. Cependant, moins de traversée ne signifie pas que le système d'événements IE est plus efficace. Soutenir deux systèmes d'événements en même temps entraînera une plus grande flexibilité à notre développement du point de vue du développement et de la conception. De ce point de vue, les événements DOM2 sont toujours très souhaitables. Le code de l'événement DOM2 est le suivant:
La copie de code est la suivante:
var btndom = document.getElementById ("btn");
btndom.addeventListener ("cliquez", fonction () {
alert ("Cliquez sur moi!");
},FAUX);
var ftn = fonction () {
alert ("cliquez sur moi aussi!");
};
btndom.addeventListener ("click", ftn, false);
L'ajout d'événements dans le traitement d'événements DOM2 utilise AddeventListener, qui reçoit un paramètre de plus que le traitement d'événements IE. Les deux premiers signifient les deux paramètres de la méthode de traitement des événements IE. La seule différence est que le préfixe ON est supprimé dans le premier paramètre, et le troisième paramètre est une valeur booléenne. Si sa valeur est vraie, l'événement sera traité en mode capture, avec la valeur fausse. L'événement est traité en bulles. Avec le troisième paramètre, nous pouvons comprendre pourquoi l'élément d'événement devrait être exécuté deux fois dans le traitement des événements DOM2. Le but est d'être compatible avec les deux modèles d'événements. Cependant, veuillez noter ici que, que nous choisissons de capturer ou de bulles, les deux traversées seront effectuées pour toujours. Si nous choisissons une méthode de traitement d'événements, aucune fonction de traitement des événements ne sera déclenchée dans l'autre processus de traitement d'événements. Ceci est le même que le principe de ralenti de la voiture en équipement neutre. Grâce à la conception de la méthode des événements DOM2, nous savons que les événements DOM2 ne peuvent exécuter que l'une des deux méthodes de traitement d'événements lors de l'exécution. Il est impossible pour deux systèmes de flux d'événements de provoquer en même temps. Par conséquent, bien que l'élément soit traversé deux fois, la fonction de l'événement ne peut pas être provoquée deux fois. Notez que je veux dire qu'aucune fois, il n'est pas provoqué, qui fait référence à une fonction d'événement. En fait, nous pouvons simuler la situation où deux modèles de flux d'événements sont exécutés en même temps, comme le code suivant:
La copie de code est la suivante:
btndom.addeventListener ("click", ftn, true);
btndom.addeventListener ("click", ftn, false);
Mais cette façon d'écrire est le traitement multi-événements, ce qui équivaut à cliquer deux fois sur le bouton.
DOM2 fournit également une fonction pour supprimer les événements. Cette fonction est devingEventListener, écrite comme suit:
La copie de code est la suivante:
btndom.reMoveEventListener ("click", ftn, false);
Il en va de même pour l'événement IE, c'est-à-dire que les paramètres doivent être cohérents avec les paramètres qui définissent l'événement. Cependant, lors de l'utilisation de RemoveEventListener, le troisième paramètre n'est pas passé. La valeur par défaut est de supprimer l'événement de bulle, car la valeur par défaut est fausse si le troisième paramètre n'est pas passé. Par exemple:
La copie de code est la suivante:
btndom.addeventListener ("click", ftn, true);
btndom.reMoveEventListener ("click", ftn);
Exécutez-le et constatez que l'événement n'a pas été supprimé avec succès.
Enfin, je tiens à dire que la gestion des événements DOM2 est bien prise en charge dans IE9, y compris IE9 ou supérieur, et IE8 ci-dessous ne prend pas en charge les événements DOM2.
Comparons les trois méthodes d'événements ci-dessous, comme suit:
Comparaison 1: comparaison d'une méthode pour un côté et les deux autres méthodes
La façon d'écrire la méthode est de combiner HTML et JavaScript. Tu m'as et je t'ai. Approfondissez cette méthode pour réaliser un développement mixte de HTML et JavaScript. Dans un terme logiciel, c'est le couplage de code. Le couplage du code n'est pas bon et c'est très mauvais. C'est le niveau d'un programmeur recrue, donc une fois que la méthode est complètement vaincue, les deux autres méthodes gagneront.
Comparaison 2: méthode 2 et méthode 3
Les deux sont écrits de la même manière. Parfois, il est vraiment difficile de dire qui est meilleur ou pire. En regardant le contenu ci-dessus, nous avons constaté que la plus grande différence entre le mode 2 et le mode 3 est qu'il n'y a qu'un seul événement dans un élément DOM, et une seule fois, tandis que le mode 3 peut permettre à un événement dans un élément DOM d'avoir plusieurs fonctions de gestion d'événements. Dans le traitement des événements DOM2, le mode 3 peut également nous permettre de contrôler avec précision la méthode de flux d'événements. Par conséquent, la fonction du mode 3 est plus puissante que le mode 2, donc par rapport au mode 3, elle est légèrement meilleure.
Ce qui suit est au centre de cet article: les problèmes de performances des systèmes d'événements. Pour résoudre les problèmes de performances, il faut trouver un objectif. Ici, je réfléchirai aux problèmes de performances des systèmes d'événements à partir de deux points de mise au point, à savoir: la réduction du nombre de traversées et de consommation de mémoire.
Tout d'abord, le nombre de traversées. Qu'il s'agisse de capturer des flux d'événements ou des flux d'événements bouillonnants, ils traverseront des éléments, mais ils seront tous des traversées à partir de la fenêtre ou du document supérieur. Si l'élément DOM de la page a une relation parent-enfant profonde, plus vous traversez d'éléments, plus il sera nocif, comme le traitement des événements DOM2, plus la traversée est grande. Comment résoudre le problème de la traversée de ce flux d'événements? Ma réponse est non. Certains amis ici peuvent avoir des questions, comment se fait-il qu'il n'y a plus? Il y a un objet d'événement dans le système d'événements, qui est un événement. Cet objet a une méthode pour empêcher les événements bouillonnants ou capturer. Pourquoi est-ce que je dis qu'il n'y a personne? La question de cet ami a du sens, mais si nous voulons utiliser cette méthode pour réduire la traversée, notre code traitera de la relation entre les éléments du père et du fils et la relation d'élément grand-père. Si les éléments de la page sont beaucoup imbriqués, c'est une tâche qui ne peut pas être terminée, donc ma réponse est que le problème de la traversée ne peut pas être modifié, et nous ne pouvons que nous y adapter.
Il semble que la réduction de la traversée ne puisse pas résoudre le problème de performance du système d'événements, donc nous ne pouvons maintenant considérer que la consommation de mémoire. J'entends souvent les gens dire que C # est très utile, mais c'est encore mieux pour le développement du Web. Nous pouvons faire glisser directement un bouton vers la page du C # ide. Une fois que le bouton a atteint la page, le code JavaScript ajoutera automatiquement un événement au bouton. Bien sûr, la fonction d'événement à l'intérieur est une fonction vide. Je pense donc que nous pouvons placer 100 boutons sur la page de cette manière. Si un seul code ne fonctionne pas, il y aura un traitement des événements de 100 bouton, ce qui est super pratique. Enfin, nous ajoutons un événement de bouton spécifique à l'un des boutons pour faire fonctionner la page. Cette page est-elle efficace? Dans JavaScript, chaque fonction est un objet, et chaque objet consomme de la mémoire, donc ce code de fonction d'événement 99 inutile doit consommer beaucoup de mémoire de navigateur précieuse. Bien sûr, nous ne le ferons pas dans l'environnement de développement réel, mais dans l'ère d'aujourd'hui de l'Ajax populaire et un développement d'une seule page est fou et populaire, il y a tellement d'événements sur une page Web, ce qui signifie que chaque événement a une fonction d'événement, mais chaque opération que nous déclenchons uniquement. À l'heure actuelle, d'autres événements dorment en position couchée, ce qui ne joue aucun rôle et consomme de la mémoire informatique.
Nous avons besoin d'une solution pour changer cette situation, et il y a en effet une telle solution en réalité. Afin de décrire clairement ce plan, je veux d'abord ajouter des connaissances de fond. Dans la discussion du traitement des événements DOM2, j'ai mentionné le concept d'objet cible. En mettant de côté la méthode de traitement des événements DOM2, il existe également le concept d'objet cible dans le traitement des événements de capture et le traitement des événements de bulles. L'objet cible est l'élément DOM de l'opération spécifique de l'événement. Par exemple, le bouton de l'opération du bouton Click est l'objet cible. Peu importe la méthode de traitement des événements, la fonction d'événement contiendra un objet d'événement. L'objet d'événement a une cible d'attribut, la cible pointe toujours vers l'objet cible, et l'objet Event a un autre attribut, CurrentTarget, qui pointe vers l'élément DOM s'écoulant vers l'événement Capture ou Bubble. D'après la description ci-dessus, nous savons que s'il s'agit d'un événement de capture ou d'un événement à bulles, le flux d'événement s'écoulera vers le document. Si nous ajoutons un événement de clic sur le document et que le bouton de la page n'ajoute pas d'événement de clic, alors nous cliquons sur le bouton et nous savons que l'événement de clic sur le document déclenchera. Il y a un détail ici que lorsque l'événement de clic document est déclenché, la cible de la cible de l'événement est le bouton plutôt que le document, afin que nous puissions écrire le code comme ceci:
La copie de code est la suivante:
<input type = "bouton" id = "btn" name = "btn" value = "bouton" />
<a href = "#" id = "aa"> aa </a>
document.addeventListener ("cliquez", fonction (evt) {
var cible = evt.target;
commutateur (cible.id) {
cas "btn":
alert ("bouton");
casser;
cas "aa":
alerte ("a");
casser;
}
},FAUX);
L'exécutant, nous avons constaté que l'effet est le même que l'événement que nous avons écrit le bouton séparément. Mais ses avantages sont évidents. Une fonction gère la fonction d'événement de toute la page, et aucune fonction d'événement n'est inactive, ce qui est parfait. Ce plan a également un nom professionnel: la délégation des événements. La méthode du délégué de JQuery est effectuée selon ce principe. En fait, l'efficacité de la délégation des événements se reflète non seulement dans la réduction des fonctions d'événements, mais réduit également les opérations de traversée DOM. Par exemple, dans l'exemple ci-dessus, nous ajoutons une fonction sur le document. Le document est l'objet de niveau supérieur sur la page, et l'efficacité de la lecture est très élevée. En ce qui concerne les événements d'objets spécifiques, nous n'utilisons pas l'opération DOM mais utilisons l'attribut cible de l'objet Event. Tout cela ne peut être résumé qu'en une phrase: c'est vraiment rapide, aucune raison d'être rapide.
La délégation des événements peut également nous apporter un excellent sous-produit. Les amis qui ont utilisé JQuery auraient dû utiliser la méthode en direct. La fonctionnalité de la méthode en direct est que vous pouvez ajouter des opérations d'événements aux éléments de page. Même si cet élément n'existe pas sur la page à l'heure actuelle, vous pouvez ajouter ses événements. Après avoir compris le mécanisme de délégation de l'événement, le principe de la vie est facile à comprendre. En fait, JQuery's Live se fait par délégation d'événements, et Live est également un moyen efficace d'ajouter l'événement.
Après avoir compris la délégation des événements, nous constatons que la méthode de liaison de JQuery est une méthode inefficace. Parce qu'il utilise la méthode de définition de l'événement d'origine, nous devons utiliser Bind avec prudence. En fait, les développeurs de JQuery ont également remarqué ce problème. La nouvelle version de jQuery a une méthode sur. La méthode ON contient toutes les fonctions des méthodes de liaison, de live et de délégué. Je suggère donc que les amis qui ont lu cet article abandonnent la méthode précédente pour ajouter des événements et utiliser des fonctions pour ajouter des événements.
La délégation des événements a un autre avantage. Dans l'exemple de la délégation des événements dans l'article ci-dessus, j'ai ajouté des événements au document. Ici, je veux faire une comparaison. Dans jQuery, nous avons l'habitude de mettre la définition des événements d'élément DOM dans la méthode Ready, comme indiqué ci-dessous:
La copie de code est la suivante:
$ (document) .ready (function () {
Xxx.bind ("click", function () {});
});
La fonction Ready est exécutée après le chargement du document Page Dom. Il est exécuté d'abord que la fonction onload. Cela présente de nombreux avantages à l'avance. L'un des avantages est également d'améliorer les performances. La définition de l'événement comme JQuery est également une pratique standard. Je crois que certains amis doivent lier certains événements en dehors de Ready, et enfin trouver que le bouton sera invalide. Ce scénario invalide prend parfois un moment, et il ira bien après un certain temps. Par conséquent, nous ignorons souvent le principe de ce problème et ne lions pas les événements dans la fonction prête. Cette opération est en fait des événements de liaison avant le chargement du DOM, et dans cette période, nous leur lions en fait des événements. , Il est très probable que certains éléments n'ont pas été construits sur la page, donc la liaison des événements ne sera pas valide. Par conséquent, la raison des événements prêts à définir est de s'assurer que tous les éléments de la page sont chargés pour définir les événements de l'élément DOM après leur chargement. Cependant, les problèmes peuvent être évités lors de l'utilisation des délégués d'événements. Par exemple, les événements contraignants à un document, le document représente toute la page, c'est donc le premier temps pour le charger. Par conséquent, il est difficile d'atteindre les délégués d'événements sur le document, et il est également difficile de faire signaler le navigateur "Fonction xxx non définie". Pour résumer cette fonctionnalité: le code du délégué des événements peut être exécuté à n'importe quelle étape du chargement des pages, ce qui fournira aux développeurs une plus grande liberté dans l'amélioration des performances de la page Web ou l'amélioration des effets de la page Web.
OK, cet article a été écrit. Bonne nuit.