Pytanie Dlaczego przechowywanie danych jako atrybutu elementu jest ryzykowne?


Wciąż czytam to samo:

"Przechowywanie wartości właściwości bezpośrednio na elementach DOM jest ryzykowne z powodu możliwych wycieków pamięci."

Ale czy ktoś może wyjaśnić te zagrożenia bardziej szczegółowo?


21
2017-10-09 15:14


pochodzenie


gdzie to czytasz? - tybro0103
?? Myślę, że dokładnie odwrotnie. Najczęstszym problemem z przeciekami pamięci jest zwykle odwołanie cykliczne. przeczytaj komentarze w http://perfectionkills.com/understanding-delete/ - Crisim Il Numenoreano
Jestem z @ tybro0103 na tym; nie wierz we wszystko, co czytasz w sieci. Przechowywanie danych w data- atrybuty nie będą same w sobie powodować wycieków pamięci. Biorąc to pod uwagę, uaktualniam odpowiedź @ Wernera poniżej, by cytować renomowane źródło. - Sampson
Proszę podać swoje źródło. - zzzzBov
@zzzzBov: Myślę, że źródłem jest ta odpowiedź do poprzedniego pytania. - I Hate Lazy


Odpowiedzi:


(Przez atrybut zakładam, że odwołujesz się do właściwości w elementach DOM.)

Czy właściwości niestandardowe elementów DOM są bezpieczne?


16
2017-10-09 15:18



Czy możesz wyjaśnić, co masz na myśli mówiąc "wyczyść element .data () używając jQuery, gdy niszczysz element"
@Anne: Tak. Wszystkie dane, procedury obsługi itp. Powiązane z elementem są przechowywane w pojedynczej składnicy danych nazywanej jQuery.cache. Łącze między elementem a jego danymi w sklepie jest numerem seryjnym, który jQuery umieszcza bezpośrednio na elemencie. Jeśli użyjesz jQuery do zniszczenia elementu, jQuery wyszuka dane w magazynie i usunie je. Problem polega na tym, że jeśli nie użyjesz jQuery do zniszczenia elementu, to numer seryjny zostanie utracony wraz z elementem i powiązane dane w jQuery.cache jest trwale osierocony. IMO, to znacznie poważniejsze niż przechowywanie niewielkich danych na elemencie. - I Hate Lazy
Dziękuję za odpowiedź. bardzo pomocne - mr.soroush


Według dokumentacja jQuery:

W Internet Explorerze przed wersją 9, użyj .prop (), aby ustawić DOM   właściwość elementu do niczego innego niż prosta prymitywna wartość   (liczba, ciąg lub boolean) może spowodować wycieki pamięci, jeśli właściwość jest   nie usunięte (przy użyciu .removeProp ()) przed usunięciem elementu DOM   z dokumentu. Aby bezpiecznie ustawić wartości obiektów DOM bez pamięci   wycieki, użyj .data ().


12
2017-10-09 15:17



Miałem na myśli moje użycie $ ("# id"). Attr ("data-xx", "yy"); Czy .prop coś innego?
Uważam, że zaakceptowana odpowiedź pod poniższym linkiem jest bardzo dobrym wyjaśnieniem różnicy między .attr () i .prop (): stackoverflow.com/questions/5874652/prop-vs-attr - Werner Kvalem Vesterås