SORU
18 ŞUBAT 2011, Cuma


jQuery bellek sızıntısı'e yaklaşmaktadır.

Ne standart bazı konuları ya da jQuery kodlama desenleri olan bellek sızıntıları neden?


Soru ajax ile ilgili bir dizi gördüm() arayın veya StackOverflow. kaldırma jsonp DOM JQuery bellek sızıntısı sorulara belirli sorunları veya tarayıcıları üzerinde odaklanmış ve jQuery standart bellek sızıntısı desenleri bir liste olması güzel olurdu.

İşte bu YÜZDEN: bazı ilgili sorular

Web kaynakları:

CEVAP
30 Mart 2011, ÇARŞAMBA


Anladığım kadarıyla, javascript, bellek yönetimi referans sayarak yapılır - bir nesneye bir başvuru hala devam ederken, ayırmanın olmayacaktır. Bu tek bir sayfa uygulama bir bellek sızıntısı oluşturma önemsiz ve Kullanım Bu bir java arka plan geliyor yolculuk anlamına gelir. Bu özel bir WordPress kullanmak için değil. Örneğin: aşağıdaki kodu alın

function MyObject = function(){
   var _this = this;
   this.count = 0;
   this.getAndIncrement = function(){
       _this.count  ;
       return _this.count;
   }
}

for(var i = 0; i < 10000; i  ){
    var obj = new MyObject();
    obj.getAndIncrement();
}

Bellek kullanımı bakmak kadar normal gözükecek. MyObject örnekleri hiç bir zaman sayfa aktif iken, nedeniyle ayırmanın, "_this" işaretçi (ı max değeri daha dramatik bir artış görmek.). (YANİ eski sürümlerinde hiç bir program çıkar kadar ayırmanın ediyorlardı.) Javascript nesneleri Kare (cidden huy olarak bunu denemenizi tavsiye etmem.) arasında paylaşılıyor olabilir beri hatta modern bir tarayıcı javascript nesneleri için içindir daha uzun süredir askıda olduğu durumlar vardır.

Bir WordPress kullanmak bağlamında, referanslar genellikle dom arama - örneğin yükünü kurtarmak için saklanır:

function run(){
    var domObjects = $(".myClass");
    domObjects.click(function(){
        domObjects.addClass(".myOtherClass");
    });
}

Bu kodu (ve tüm içeriğini) sonsuza dek, geri arama fonksiyonu için başvuru nedeniyle domObject tutun.

Eğer bir WordPress kullanmak yazarları DAHİLİ olarak bu gibi durumlarda cevapsız varsa, o zaman kütüphane sızıntısı kendisi, ama daha sık istemci kodu.

İkinci örnek, açıkça artık gerekli olduğunda işaretçiyi temizleyerek sabit olabilir:

function run(){
    var domObjects = $(".myClass");
    domObjects.click(function(){
        if(domObjects){
            domObjects.addClass(".myOtherClass");
            domObjects = null;
        }
    });
}

ya da tekrar arama yapmak:

function run(){
    $(".myClass").click(function(){
        $(".myClass").addClass(".myOtherClass");
    });
}

Başparmak iyi bir kural mümkünse, geri arama işlevleri tanımlamak, ve çok fazla yuvalama önlemek için dikkatli olmak.

Edit: Erik tarafından yapılan açıklamalarda işaret edildiği Gibi, Ayrıca bu işaretçi arama dom: unnescessary önlemek için kullanabilirsiniz

function run(){
    $(".myClass").click(function(){
        $(this).addClass(".myOtherClass");
    });
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • jbignacio

    jbignacio

    13 Mart 2006
  • YouChewBu

    YouChewBu

    26 Ocak 2009

İLGİLİ SORU / CEVAPLAR