Nous écrivons souvent des rappels via des fonctions anonymes.
Pour faire simple, anonyme signifie une fonction sans nom, qui est généralement exécutée immédiatement. Mais comment se comporte-t-il par rapport aux fonctions nommées (fonctions avec des noms) ?
On peut comparer. On peut trouver un ordinateur capable d'exécuter des commandes Shell et utiliser un grand nombre d'appels de fonction pour voir le temps d'exécution des deux :
anonyme.js
nombre de variables = 100000000
, somme = 0
while (count--) (function() { sum })()
Exécutez-le
$ nœud de temps anonyme.js
réel 0m1.456s
utilisateur 0m0.015s
sys 0m0.031s
Jetons un coup d'œil aux fonctions nommées
named.js
nombre de variables = 100000000
, somme = 0
var cb = fonction() {
somme
>
while (count--) cb()
Exécutez-le
$ nœud de temps nommé.js
réel 0m0.575s
utilisateur 0m0.000s
système 0m0.046s
Les fonctions nommées sont beaucoup plus rapides, pourquoi ? En fait, ce n'est pas difficile à expliquer. Les fonctions anonymes doivent réinterpréter le rappel à chaque fois, mais les fonctions nommées ne doivent être interprétées qu'une seule fois, donc les performances seront améliorées. Cependant, le test a révélé que cette amélioration est très, très faible. . Il n'est pas nécessaire de séparer un rappel très pratique écrit comme une autre variable.
De plus, il existe deux manières d'écrire des fonctions nommées :
Expression de fonction
var func = fonction() {
console.log('a')
>
Déclaration de fonction
fonction func() {
console.log('b')
>
En fait, il peut y avoir des problèmes si ces deux éléments sont utilisés ensemble, comme
var func = fonction() {
console.log('a')
>
fonction func() {
console.log('b')
>
//Le résultat est : a
Par conséquent, la forme d'expression de fonction est principalement utilisée à l'heure actuelle, mais quelle est la performance de la déclaration de fonction ?
named2.js
nombre de variables = 100000000
, somme = 0
fonction cb() {
somme
>
while (count--) cb()
Exécutez-le et comparez les deux
$ nœud de temps nommé.js
réel 0m0.553s
utilisateur 0m0.000s
sys 0m0.015s
$ nœud temporel nommé2.js
réel 0m0.529s
utilisateur 0m0.000s
sys 0m0.047s
Il semble que la déclaration de fonction sera légèrement plus rapide, mais la vitesse est très, très peu évidente. Personnellement, je recommande toujours d'écrire une déclaration de fonction.
PS : Ces données ont été testées en utilisant git-base sous Windows 7.