우리는 종종 익명 기능을 통해 콜백을 작성합니다.
간단히 말해서, 익명은 이름이없는 함수를 의미하며 일반적으로 즉시 실행됩니다. 그러나 명명 된 함수 (이름이있는 함수)로 어떻게 수행됩니까?
우리는 그것을 비교할 수 있습니다. 우리는 쉘 명령을 실행하여 많은 수의 함수 호출을 사용하여 실행 시간이 두 가지에 의해 어떻게 소비되는지 확인할 수있는 컴퓨터를 찾을 수 있습니다.
익명 .js
코드 사본은 다음과 같습니다.
var count = 100000000
, sum = 0
while (count-) (function () {sum ++}) ()
실행하십시오
코드 사본은 다음과 같습니다.
$ 시간 노드 Anonymous.js
실제 0m1.456
사용자 0m0.015S
SYS 0m0.031S
명명 된 기능을 살펴 보겠습니다
이름 .js
코드 사본은 다음과 같습니다.
var count = 100000000
, sum = 0
var cb = function () {
합계 ++
}
while (count-) cb ()
실행하십시오
코드 사본은 다음과 같습니다.
$ 시간 노드 명명 .js
실제 0m0.575s
사용자 0m0.000s
SYS 0m0.046S
이름이 지정된 기능은 훨씬 빠르며 왜 이런 일이 일어나고 있습니까? 사실, 설명하기는 어렵지 않습니다. 익명 함수는 매번 콜백을 재 해석해야하지만 명명 된 기능은 한 번만 해석되므로 성능이 향상됩니다. 그러나 테스트에 따르면이 개선이 매우 작고 다른 변수에 매우 편리한 콜백을 별도로 작성할 필요가 없습니다.
이름 지정된 기능을 작성하는 두 가지 방법이 있습니다.
기능 표현
코드 사본은 다음과 같습니다.
var func = function () {
Console.log ( 'A')
}
기능 선언
코드 사본은 다음과 같습니다.
function func () {
Console.log ( 'B')
}
실제로이 두 가지가 함께 사용되면 다음과 같은 문제가있을 수 있습니다.
코드 사본은 다음과 같습니다.
var func = function () {
Console.log ( 'A')
}
function func () {
Console.log ( 'B')
}
// 출력은 다음과 같습니다
따라서 현재 함수 표현식의 형태가 주로 사용되지만 함수 선언의 성능은 어떻게 사용됩니까?
이름이 2.js
코드 사본은 다음과 같습니다.
var count = 100000000
, sum = 0
함수 cb () {
합계 ++
}
while (count-) cb ()
그것을 실행하고 둘을 비교하십시오
코드 사본은 다음과 같습니다.
$ 시간 노드 명명 .js
실제 0m0.553s
사용자 0m0.000s
SYS 0m0.015S
$ 2.js라는 $ 시간 노드
실제 0m0.529s
사용자 0m0.000s
SYS 0m0.047S
함수 선언이 조금 더 빠를 것 같지만 매우 중요하지 않습니다. 개인적으로 기능 선언 쓰기 방법을 권장합니다.
추신 :이 데이터는 Windows 7에서 Git-Base를 사용하여 테스트됩니다.