2012-02-11 31 views
8

Bu yanlış mı? Öyleyse neden? Özel verilerin dom öğelerinde saklanması

var elm = document.getElementById("myElm"); 
elm.customValue = {attr1 : "test", attr2 : "test"}; 

veri özellikleridir nasıl kullanılacağını anlamak, ama tüm bu özelliklerle benim dom kadar çamurlu istemiyoruz.

cevap

6

Bu, bazı tarayıcılarda bazı yerel C nesnelerini (DOM öğesi) ve bir JS nesnesini birbirine bağladığınız ve bazı çöp toplama algoritmalarının bununla baş edemediğinizden bir bellek sızıntısı ortaya çıkarır. IE bunlardan biri. http://msdn.microsoft.com/en-us/library/ie/bb250448(v=vs.85).aspx

+6

Düzgün bağlam için, söz konusu nesne DOM'den kaldırılırsa ve bunun çöp toplanmasını beklerseniz, bu yalnızca bir bellek sızıntısı getirir. Ve bellek sızıntısı yalnızca DOM öğesiyle ilişkilendirilmiş veriler çok büyükse veya yaratılanların binlerce var ise DOM'den kaldırılır. Sayfanızın ömrü boyunca DOM'da kalan bir nesne için bellek sızıntısı yoktur. – jfriend00

+0

İyi not! Sızıntı için elementi çıkarmanız gerektiğini söylemeyi unutmuşum. –

+0

Fantastik giriş çocuklar! Teşekkürler! –

3

Alt çizgi, neden doğru araçlarını kullanın ki? Gelecekte, yakın ya da uzak, hangi özel özellik adının kullanıldığını, söz konusu öğenin w3c özelliklerine eklenip eklenmeyeceğini bilmiyorsunuz. Şimdi aniden kodunuz bozuldu.

Önceden tanımlanmış özelliklere sahip öğelere özel özellikler eklenmesi, kodunuzu bakım kâbusuna dönüştürür. Siz ya da ileride bir başkası olup olmadığına bakılmaksızın, geliştiricinin a) bir öğeye özel bir özellik eklendiğinde ya da b) öğenin kendisinin aslında bir "a" olduğu bir "wtf" anı olacaktır. özel nesne.

Son olarak, bu öğe Ajax veya dinamik HTML üzerinden dom olarak değiştirilirse ne olur? Şimdi mülk gitti ve kodunuz kırıldı.

+3

Söylediğinizlerin hiçbiri anlamsızdır ... –

+0

Anlamsız olan nedir? –

İlgili konular