Anonim fonksiyonları kullanarak performansını etkiliyor mu?
Merak ediyorum, Javascript fonksiyonları kullanarak adlandırılmış ve anonim fonksiyonlar arasında performans farkı var mı?
for (var i = 0; i < 1000; i) {
myObjects[i].onMyEvent = function() {
// do something
};
}
vs
function myEventHandler() {
// do something
}
for (var i = 0; i < 1000; i) {
myObjects[i].onMyEvent = myEventHandler;
}
İlk nadiren kullanılan fonksiyonları kodunuzu kadar karmakarışık değil beri düzenli, ama yeniden ilan işlev birden çok kez sen bunun bir önemi var mı?
CEVAP
Performans sorunu burada döngünün her tekrarında yeni bir işlev nesnesi ve isimsiz bir işlevi olması değil yaratma ücreti
for (var i = 0; i < 1000; i) {
myObjects[i].onMyEvent = function() {
// do something
};
}
Kod aynı vücut ve sözlü kapsam (closure) için bağlayıcı olmasına rağmen binlerce farklı işlevi nesneleri oluşturma. Aşağıdaki sadece atar çünkü daha hızlı, diğer taraftan görünüyoraynıdöngü boyunca dizi elemanları için referans işlevi:
function myEventHandler() {
// do something
}
for (var i = 0; i < 1000; i) {
myObjects[i].onMyEvent = myEventHandler;
}
Eğer oluşturmak için bir anonim işlev önce giren döngü, sonra tek atama başvuruları için dizi elemanları içinde iken döngü, göreceksiniz ki orada hiçbir performans ya da anlamsal fark yoktur ile karşılaştırıldığında isimli işlev sürümü:
var handler = function() {
// do something
};
for (var i = 0; i < 1000; i) {
myObjects[i].onMyEvent = handler;
}
Kısacası, adlı adsız fonksiyonları kullanarak gözlemlenebilir performans maliyeti yok.
Bir kenara olarak, arasında fark yoktur yukarıda görünebilir:
function myEventHandler() { /* ... */ }
ve:
var myEventHandler = function() { /* ... */ }
Eski birbildirim fonksiyonuikincisi ise isimsiz bir fonksiyon için bir değişken atama. Aynı etkiye sahip olabilirler, ancak JavaScript onları biraz farklı davranıyor. Farkı anlamak için okumanızı tavsiye ederiz, “JavaScript function declaration ambiguity”.
Herhangi bir yaklaşım için gerçek yürütme zamanı büyük ölçüde derleyici ve çalışma zamanı tarayıcı uygulaması tarafından dikte olacak. Modern tarayıcı performansı tam bir karşılaştırma için, the JS Perf site ziyaret edin
Adsız/anonim ad vs statik fonksiyonlar...
Anonim fonksiyonları Javascript dosyal...
Otomatik yürütme anonim JavaScript fon...
Genel std::kullanarak bir sınıfın üye ...
Adı uzunluğu Redis performansını etkil...