SORU
15 Mart 2010, PAZARTESİ


Neden bir WordPress kullanmak çok kötü bir bellek sızıntısı?

Bu bir takip soru geçen hafta yayınlanan bir tür: http://stackoverflow.com/questions/2429056/simple-jquery-ajax-call-leaks-memory-in-ie

Jquery sözdizimi ve güzel onun tüm özelliklerini seviyorum, ama otomatik olarak ajax ile güncellemeleri tablo hücreleri bellek sızıntı çağıran bir sayfa ile sorun yaşıyorum.

Deneme için iki basit test sayfaları yarattım. Her iki sayfa bir ajax çağrısı, .1 saniye. Her başarılı ajax çağrısından sonra, bir sayaç artırılır ve DOM güncellenir. Senaryoyu sonra 1000 devir vermiyor.

Bir de ajax çağrısı için jquery ve DOM güncelleştirmek için kullanır. Diğer ajax Yahoo API kullanır ve bir belge yok.(...) getelementbyıd.innerHTML DOM güncelleştirme için.

Jquery sürümü, bellek sızdırıyor kötü. Damla (XP üzerinde IE 7 ile Eve) çalışan, 9 MB başlayan ve büyüyen 48 MB hafıza ile yaklaşık doğrusal olarak bütün zaman tamamlanır. Ben güncellemeleri DOM bu açıklama, hala 32 MB, hatta basit DOM güncellemeleri, önemli miktarda bellek sızıntısı olduğuna dair bitirir. Non-jquery sürümü ve 9 MB, DOM güncellemeleri bakılmaksızın hakkında başlıyor ve bitiyor.

Herkes bir WordPress kullanmak çok kötü sızıntı neden iyi bir açıklama var mı? Eksik bir şey belli mi? Farkında değilim döngüsel bir başvuru var mı? Ya da bir WordPress kullanmak sadece ciddi hafıza sorunları var mı?

Burada (jquery) sızdıran sürümü için kaynak:

<html>
  <head>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load('jquery', '1.4.2');
    </script>
    <script type="text/javascript">
      var counter = 0;
      leakTest();
      function leakTest() {
        $.ajax({ url: '/html/delme.x',
                 type: 'GET',
                 success: incrementCounter
               });
      }
      function incrementCounter(data) {
        if (counter<1000) {
          counter  ;
          $('#counter').text(counter);
          setTimeout(leakTest,100);
        }
        else $('#counter').text('finished.');
      }
    </script>
  </head>
  <body>
    <div>Why is memory usage going up?</div>
    <div id="counter"></div>
  </body>
</html>

Ve burada olmayan sızdıran sürümü:

<html>
  <head>
    <script type="text/javascript" src="http://yui.yahooapis.com/2.8.0r4/build/yahoo/yahoo-min.js"></script>
    <script type="text/javascript" src="http://yui.yahooapis.com/2.8.0r4/build/event/event-min.js"></script>
    <script type="text/javascript" src="http://yui.yahooapis.com/2.8.0r4/build/connection/connection_core-min.js"></script>
    <script type="text/javascript">
      var counter = 0;
      leakTest();
      function leakTest() {
        YAHOO.util.Connect.asyncRequest('GET',
                                        '/html/delme.x',
                                        {success:incrementCounter});
      }
      function incrementCounter(o) {
        if (counter<1000) {
          counter  ;
          document.getElementById('counter').innerHTML = counter;
          setTimeout(leakTest,100);
        }
        else document.getElementById('counter').innerHTML = 'finished.'
      }
    </script>
  </head>
  <body>
    <div>Memory usage is stable, right?</div>
    <div id="counter"></div>
  </body>
</html>

CEVAP
29 Mart 2011, Salı


Benim ilk düşünce yolu ile jquery ajax yöntemi de ilgisi olabilir:

bir. döngüsel başvurular, IE için özellikle kötü oluşturur

b. oluşturur yaratılmıştır ve DontDelete özelliği ayarı nedeniyle silinemez iç nesnelerin özelliklerini. Daha fazla bilgi için bkz: http://perfectionkills.com/understanding-delete/

Her iki şekilde de, çöp toplayıcı, özellikle eğer şüpheli işlevi sık yürütülüyorsa kaçak bir bellek sızıntısı neden olur, çöp toplamaktan başka engel olur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • makemebad35

    makemebad35

    17 NİSAN 2006
  • PorterRobinsonVEVO

    PorterRobins

    11 Kasım 2013
  • The Amazing Atheist

    The Amazing

    20 Kasım 2006