2017-08-11 7 views
8

krom son ve diğer tarayıcılarda test edilmiştir. Bu sayfa her 60 saniyede bir yenilemek için timer()'u başlatır. init() ve her refresh() günü, o sunucudan veri alır ve sayfanın aynı görüntüler. Her yenilemede MB'nin çok fazla olduğunu görüyoruz. Ben 1. nesne/Düğümleri tespit kez Şimdiangularjs 1.5: Neyin sızdırıldığını ve sızıntıyı nasıl tespit ettiğini nasıl belirleriz?

  1. , nasıl ben sızıntıları tespit hakkında nasıl gidiyor,

  2. sızdırılmış ediliyor belirli nesneler ve/veya DOM Düğümleri tanımlarım?

Angularjs 1.5 için yukarıdaki kitapları kapsayan iyi ders kitapları var mı?

+1

İyi bir başlangıç, Geliştirici araçlarını (veya daha yeni Chrome sürümlerinde Bellek) denemek ister. –

+0

Çalışması için daha fazla ayrıntıya ihtiyacım vardı. "Chrome dev araçlarını kullanarak bellek sızıntılarını nasıl bulabilirim" için arama yaptım ve ayrılmış DOM nesnelerini belirleyebiliyordum. Ama oradan somut bir şey elde edemedim. – anjanb

cevap

1

Muhtemelen https://developers.google.com/web/tools/chrome-devtools/memory-problems/ ve http://www.dwmkerr.com/fixing-memory-leaks-in-angularjs-applications/ adreslerinde daha fazla kaynak bulunmadığından emin olabilirsiniz.

sayfanın DOM ağacında veya JavaScript kodu birinden kendisine atıf bulunmamaktadır zaman bir DOM düğümü yalnızca çöp toplanabilir. Bir düğümün DOM ağacından kaldırıldığında "ayrılır" olduğu söylenir, ancak bazı JavaScript yine de ona referans verir. Ayrılmış DOM düğümleri, bellek sızıntılarının yaygın bir nedenidir. CTRL + F $scope is retained by a context for a closure. üzerinde -

Eğer zamanlayıcı bir referansa sahip ama her tazelede Yeni bir zamanlayıcı oluştururken değilseniz
  1. - $timeout

  2. Ödeme yeniden kullanarak kaçağı, çözülebilir ikinci sağlanan bağlantı. Kullanım durumu, sahip olduğunuzla çok benzer olduğunu açıkladı. Biraz ileride makalesinde:

Biz işlevini açıp sorunlar için onu inceleyebilirler. $ Scope kullanan bir $ http.get var, ama endişe verici bir şekilde her 10 saniyede bir kaydedilmiş bir $ aralığı var, bu da hiç kayıtsız. Aralık geri çağrısı $ kapsamı kullanan bir kapatma ile başka bir $ http.get kullanır. Sorun bu.

yukarıdakilerden hiçbiri burada daha sonra uygulanan bir anahtar kelime olarak memory leak sahip AngularJS açık konuların listesi ise:

https://github.com/angular/angular.js/issues?utf8=%E2%9C%93&q=is%3Aopen%20memory%20leak

1

ben bu (değil yardımcı olacaktır emin değilim Belki de zaten ona bakmışsınızdır), ama bahsetmeye değer. Nesnelerin sürekli olarak her ajax isteği sırasında çoğaltıldığı bir önceki uygulama ile benzer bir sorun yaşadım. Bu yüzden sayfanın yükünden yaklaşık 50mb bellek kullanıyordum, ama 10-15 ajax çağırdıktan sonra hafıza roketi> 1gb'ye fırlatacaktı.

Sorunu, chrome dev tools -> memory sekmesini kullanarak tanımlayıp çözdüm. Buradan, belleğin tahsis profillerini kaydedebilir ve bir yığın anlık görüntü alabilirsin. Yani, durumunuz için zamanlayıcıyı test amacıyla 5 veya 10 saniyeye indirebilirim, sonra bu profilleyicileri çalıştırıyorum.Hangi yöntemlerin çağrıldığını ve hangi maliyete sahip olduğunu görebileceksiniz.

Bu yardımcı olur umarım.

İlgili konular