A menudo escribimos devoluciones de llamada a través de funciones anónimas.
En pocas palabras, anónimo significa una función sin nombre, generalmente se ejecuta de inmediato. Pero, ¿cómo funciona con funciones con nombre (funciones con nombres)?
Podemos compararlo. Podemos encontrar una computadora que pueda ejecutar comandos de shell para usar una gran cantidad de llamadas de funciones para ver cómo los dos consumen el tiempo de ejecución:
Anónimo.js
La copia del código es la siguiente:
Var Count = 10000000
, suma = 0
while (count--) (function () {sum ++}) ()
Ejecutarlo
La copia del código es la siguiente:
$ Time Node Anonymous.js
Real 0m1.456s
usuario 0m0.015s
SYS 0M0.031S
Echemos un vistazo a las funciones nombradas
nombrado.js
La copia del código es la siguiente:
Var Count = 10000000
, suma = 0
var cb = function () {
suma ++
}
Mientras (cuenta--) cb ()
Ejecutarlo
La copia del código es la siguiente:
$ Time Node llamado.js
Real 0m0.575s
Usuario 0m0,000s
SYS 0M0.046S
Las funciones nombradas serán mucho más rápidas, ¿por qué está sucediendo esto? De hecho, no es difícil de explicar. Las funciones anónimas deben reinterpretar la devolución de llamada cada vez, pero las funciones nombradas solo deben interpretarse una vez, por lo que el rendimiento mejorará. Sin embargo, la prueba encontró que esta mejora es muy, muy pequeña, y no hay necesidad de escribir una devolución de llamada muy conveniente en otra variable por separado.
Hay dos formas de escribir funciones con nombre:
Expresiones de funciones
La copia del código es la siguiente:
var func = function () {
console.log ('a')
}
Declaración de funciones
La copia del código es la siguiente:
función func () {
console.log ('b')
}
En realidad, si estos dos se usan juntos, puede haber problemas, como
La copia del código es la siguiente:
var func = function () {
console.log ('a')
}
función func () {
console.log ('b')
}
// La salida es: A
Por lo tanto, actualmente, la forma de expresiones de funciones se usa principalmente, pero ¿cómo es el rendimiento de las declaraciones de función?
Named2.js
La copia del código es la siguiente:
Var Count = 10000000
, suma = 0
función cb () {
suma ++
}
Mientras (cuenta--) cb ()
Ejecutarlo y comparar los dos
La copia del código es la siguiente:
$ Time Node llamado.js
Real 0m0.553s
Usuario 0m0,000s
SYS 0M0.015S
$ nodo de tiempo nombrado 2.js
Real 0m0.529s
Usuario 0m0,000s
SYS 0M0.047S
Parece que la declaración de función será un poco más rápida, pero es muy, muy insignificante. Personalmente recomiendo el método de escritura de la declaración de función.
PS: estos datos se prueban utilizando Git-Base en Windows 7.