Kami sering menulis panggilan balik melalui fungsi anonim.
Sederhananya, anonim berarti fungsi tanpa nama, biasanya dieksekusi segera. Tapi bagaimana kinerjanya dengan fungsi bernama (fungsi dengan nama)?
Kita bisa membandingkannya. Kita dapat menemukan komputer yang dapat menjalankan perintah shell untuk menggunakan sejumlah besar panggilan fungsi untuk melihat bagaimana waktu eksekusi dikonsumsi oleh keduanya:
Anonymous.js
Salinan kode adalah sebagai berikut:
var count = 10000000
, jumlah = 0
while (count--) (function () {sum ++}) ()
Jalankan
Salinan kode adalah sebagai berikut:
$ time node anonymous.js
Real 0M1.456S
Pengguna 0m0.015s
SYS 0M0.031S
Mari kita lihat fungsi bernama
bernama.js
Salinan kode adalah sebagai berikut:
var count = 10000000
, jumlah = 0
var cb = function () {
jumlah ++
}
While (count--) cb ()
Jalankan
Salinan kode adalah sebagai berikut:
$ node waktu bernama.js
0M0.575 NYATA
Pengguna 0m0.000s
SYS 0M0.046S
Fungsi bernama akan jauh lebih cepat, mengapa ini terjadi? Bahkan, tidak sulit untuk dijelaskan. Fungsi anonim perlu menafsirkan kembali panggilan balik setiap saat, tetapi fungsi yang disebut hanya perlu ditafsirkan sekali, sehingga kinerjanya akan ditingkatkan. Namun, tes menemukan bahwa peningkatan ini sangat, sangat kecil, dan tidak perlu menulis panggilan balik yang sangat nyaman ke variabel lain secara terpisah.
Ada dua cara untuk menulis fungsi bernama:
Ekspresi fungsi
Salinan kode adalah sebagai berikut:
var func = function () {
console.log ('a')
}
Deklarasi Fungsi
Salinan kode adalah sebagai berikut:
fungsi func () {
Console.log ('B')
}
Sebenarnya, jika keduanya digunakan bersama, mungkin ada masalah, seperti
Salinan kode adalah sebagai berikut:
var func = function () {
console.log ('a')
}
fungsi func () {
Console.log ('B')
}
// Outputnya adalah: a
Oleh karena itu, saat ini, bentuk ekspresi fungsi sebagian besar digunakan, tetapi bagaimana kinerja deklarasi fungsi?
bernama2.js
Salinan kode adalah sebagai berikut:
var count = 10000000
, jumlah = 0
fungsi cb () {
jumlah ++
}
While (count--) cb ()
Jalankan dan bandingkan keduanya
Salinan kode adalah sebagai berikut:
$ node waktu bernama.js
0M0.553 NYATA
Pengguna 0m0.000s
SYS 0M0.015S
$ waktu node bernama2.js
0M0.529 NYATA
Pengguna 0m0.000s
SYS 0M0.047S
Tampaknya deklarasi fungsi akan sedikit lebih cepat, tetapi sangat, sangat tidak signifikan. Saya pribadi merekomendasikan metode penulisan deklarasi fungsi.
PS: Data ini diuji menggunakan Git-Base di bawah Windows 7.