SORU
17 EYLÜL 2008, ÇARŞAMBA


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
17 EYLÜL 2008, ÇARŞAMBA


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • MrRandomSong

    MrRandomSong

    29 Kasım 2009