Costumamos escrever retornos de chamada através de funções anônimas.
Simplificando, anônimo significa uma função sem nome, geralmente é executada imediatamente. Mas como funciona com funções nomeadas (funções com nomes)?
Podemos compará -lo. Podemos encontrar um computador que possa executar comandos de shell para usar um grande número de chamadas de função para ver como o tempo de execução é consumido pelos dois:
anonymous.js
A cópia do código é a seguinte:
var contagem = 10000000
, soma = 0
while (count--) (function () {sum ++}) ()
Execute -o
A cópia do código é a seguinte:
$ time node anonymous.js
Real 0M1.456S
Usuário 0M0.015S
SYS 0M0.031S
Vamos dar uma olhada nas funções nomeadas
nomeado.js
A cópia do código é a seguinte:
var contagem = 10000000
, soma = 0
var cb = function () {
soma ++
}
While (count--) cb ()
Execute -o
A cópia do código é a seguinte:
$ Node Time chamado.js
Real 0M0.575S
Usuário 0M0.000s
SYS 0M0.046S
As funções nomeadas serão muito mais rápidas, por que isso está acontecendo? De fato, não é difícil explicar. As funções anônimas precisam reinterpretar o retorno de chamada sempre, mas as funções nomeadas precisam ser interpretadas apenas uma vez, para que o desempenho seja melhorado. No entanto, o teste constatou que essa melhoria é muito, muito pequena e não há necessidade de escrever um retorno de chamada muito conveniente em outra variável separadamente.
Existem duas maneiras de escrever funções nomeadas:
Expressões de função
A cópia do código é a seguinte:
var func = function () {
console.log ('a')
}
Declaração de função
A cópia do código é a seguinte:
função func () {
console.log ('b')
}
Na verdade, se esses dois são usados juntos, pode haver problemas, como
A cópia do código é a seguinte:
var func = function () {
console.log ('a')
}
função func () {
console.log ('b')
}
// a saída é: a
Portanto, atualmente, a forma de expressões de função é usada principalmente, mas como é o desempenho das declarações de função?
nomeado2.js
A cópia do código é a seguinte:
var contagem = 10000000
, soma = 0
função cb () {
soma ++
}
While (count--) cb ()
Execute -o e compare os dois
A cópia do código é a seguinte:
$ Node Time chamado.js
Real 0M0.553s
Usuário 0M0.000s
SYS 0M0.015S
$ Node Time chamado2.js
Real 0M0.529S
Usuário 0M0.000s
SYS 0M0.047S
Parece que a declaração de função será um pouco mais rápida, mas é muito, muito insignificante. Pessoalmente, recomendo o método de redação da declaração de função.
PS: Esses dados são testados usando o Git-Base no Windows 7.