Bon j'essaye de faire un truc propre.
j'ai un application sensé fonctionner entièrement en javascript sans
jamais rafraichir la page.
donc je crée des objet et a un moment il faut que j'en supprime plein.
donc...
Ces objects existent dans le DOM mais aussi dans certaine variable
javascript.
Comment virer tous ces objets?
Est ce que un simple oHTMl.innerHTML = '';
va me virer proprement tous les objects du DOM ?
ou est ce que je dois les virer récursivement ?
ou bien virer simplement le premier avec un removeChild ?
Qu'advient il des pointeur sur ces object que j'ai dans mes variable
javascript ?
Est ce que le fait d'avoir des pointeurs sur ces objet empeche leur
réelle destruction?
Est ce que détruire l'objet qui contient tous ces pointeurs va libérer
tous ces pointeurs (sous réserve que ce soit necessaire).
Bref. plein de questions :)
Bon je vais faire des tests, mais il y a tellement de combinaison à
verifier que si quelqu'un a deja un début d'info la dessus c'est pas
plus mal?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
SAM
Le 5/7/10 10:23 AM, WebShaker a écrit :
Salut.
Bon j'essaye de faire un truc propre. j'ai un application sensé fonctionner entièrement en javascript sans jamais rafraichir la page.
donc je crée des objet et a un moment il faut que j'en supprime plein. donc... Ces objects existent dans le DOM mais aussi dans certaine variable javascript.
Comment virer tous ces objets? Est ce que un simple oHTMl.innerHTML = ''; va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
document.getElementsByTagName('body')[0].innerHTML = ''; et hop là !
ou est ce que je dois les virer récursivement ?
Pas ni compris ce que ça veut dire.
Amusement :
var m = []; var b = document.getElementsByTagName('body')[0], d = b.getElementsByTagName('*'), n=d.length; while(n--) m.push(d[n]); b.innerHTML = ''; n = m.length; setTimeout(function() {while(n--)b.appendChild(m[n])},5000);
Houlala ! Ça doit faire un sacré micmac c'truc !
ou bien virer simplement le premier avec un removeChild ?
removeChild, il y a des chances que ça n'enlève rien de la mémoire (des fois que tu voudrais remettre ce child plus tard) ça s'appelle 'remove' pas 'suppress' ... ni 'delete' (on l'enlève mais ni le supprime ni l'efface)
Le même micmac mais avec removeChild :
while(n--) m.push(d[n].parentNode.removeChild(d[n])); b.innerHTML = ''; n = m.length; setTimeout(function() {while(n--)b.appendChild(m[n])},5000);
Qu'advient il des pointeur sur ces object que j'ai dans mes variable javascript ?
tu mets tous tes pointeurs à null si tu as un doute.
M'enfin le pointeur sur l'élément qui est devenu '' ça ne doit plus occuper plus que si cette variable est devenu null (à mon idée, que ne partage peut-être pas M$)
Est ce que le fait d'avoir des pointeurs sur ces objet empeche leur réelle destruction?
L'objet vidé est vidé, le pointeur suit l'objet, il pointe donc sur du vide, ça ne posera de blème qu'à l'éventuel ré-emploi ultérieur de ce pointeur qui pourra alors gueuler à l'erreur.
var d = document.getElementById('truc'); d.innerHTML = ''; alert(d.getElementsByTagName('SPAN')[0].innerHTML);
Est ce que détruire l'objet qui contient tous ces pointeurs va libérer tous ces pointeurs (sous réserve que ce soit necessaire).
Là ... de la part de M$ je ne suis pas certain ... :-( pas rien compris aux fuites de mémoire d'IE.
-- sm
Le 5/7/10 10:23 AM, WebShaker a écrit :
Salut.
Bon j'essaye de faire un truc propre.
j'ai un application sensé fonctionner entièrement en javascript sans
jamais rafraichir la page.
donc je crée des objet et a un moment il faut que j'en supprime plein.
donc...
Ces objects existent dans le DOM mais aussi dans certaine variable
javascript.
Comment virer tous ces objets?
Est ce que un simple oHTMl.innerHTML = '';
va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
document.getElementsByTagName('body')[0].innerHTML = '';
et hop là !
ou est ce que je dois les virer récursivement ?
Pas ni compris ce que ça veut dire.
Amusement :
var m = [];
var b = document.getElementsByTagName('body')[0],
d = b.getElementsByTagName('*'), n=d.length;
while(n--) m.push(d[n]);
b.innerHTML = '';
n = m.length;
setTimeout(function() {while(n--)b.appendChild(m[n])},5000);
Houlala ! Ça doit faire un sacré micmac c'truc !
ou bien virer simplement le premier avec un removeChild ?
removeChild, il y a des chances que ça n'enlève rien de la mémoire
(des fois que tu voudrais remettre ce child plus tard)
ça s'appelle 'remove' pas 'suppress' ... ni 'delete'
(on l'enlève mais ni le supprime ni l'efface)
Le même micmac mais avec removeChild :
while(n--) m.push(d[n].parentNode.removeChild(d[n]));
b.innerHTML = '';
n = m.length;
setTimeout(function() {while(n--)b.appendChild(m[n])},5000);
Qu'advient il des pointeur sur ces object que j'ai dans mes variable
javascript ?
tu mets tous tes pointeurs à null
si tu as un doute.
M'enfin le pointeur sur l'élément qui est devenu ''
ça ne doit plus occuper plus que si cette variable est devenu null
(à mon idée, que ne partage peut-être pas M$)
Est ce que le fait d'avoir des pointeurs sur ces objet empeche leur
réelle destruction?
L'objet vidé est vidé, le pointeur suit l'objet, il pointe donc sur du
vide, ça ne posera de blème qu'à l'éventuel ré-emploi ultérieur de ce
pointeur qui pourra alors gueuler à l'erreur.
Bon j'essaye de faire un truc propre. j'ai un application sensé fonctionner entièrement en javascript sans jamais rafraichir la page.
donc je crée des objet et a un moment il faut que j'en supprime plein. donc... Ces objects existent dans le DOM mais aussi dans certaine variable javascript.
Comment virer tous ces objets? Est ce que un simple oHTMl.innerHTML = ''; va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
document.getElementsByTagName('body')[0].innerHTML = ''; et hop là !
ou est ce que je dois les virer récursivement ?
Pas ni compris ce que ça veut dire.
Amusement :
var m = []; var b = document.getElementsByTagName('body')[0], d = b.getElementsByTagName('*'), n=d.length; while(n--) m.push(d[n]); b.innerHTML = ''; n = m.length; setTimeout(function() {while(n--)b.appendChild(m[n])},5000);
Houlala ! Ça doit faire un sacré micmac c'truc !
ou bien virer simplement le premier avec un removeChild ?
removeChild, il y a des chances que ça n'enlève rien de la mémoire (des fois que tu voudrais remettre ce child plus tard) ça s'appelle 'remove' pas 'suppress' ... ni 'delete' (on l'enlève mais ni le supprime ni l'efface)
Le même micmac mais avec removeChild :
while(n--) m.push(d[n].parentNode.removeChild(d[n])); b.innerHTML = ''; n = m.length; setTimeout(function() {while(n--)b.appendChild(m[n])},5000);
Qu'advient il des pointeur sur ces object que j'ai dans mes variable javascript ?
tu mets tous tes pointeurs à null si tu as un doute.
M'enfin le pointeur sur l'élément qui est devenu '' ça ne doit plus occuper plus que si cette variable est devenu null (à mon idée, que ne partage peut-être pas M$)
Est ce que le fait d'avoir des pointeurs sur ces objet empeche leur réelle destruction?
L'objet vidé est vidé, le pointeur suit l'objet, il pointe donc sur du vide, ça ne posera de blème qu'à l'éventuel ré-emploi ultérieur de ce pointeur qui pourra alors gueuler à l'erreur.
var d = document.getElementById('truc'); d.innerHTML = ''; alert(d.getElementsByTagName('SPAN')[0].innerHTML);
Est ce que détruire l'objet qui contient tous ces pointeurs va libérer tous ces pointeurs (sous réserve que ce soit necessaire).
Là ... de la part de M$ je ne suis pas certain ... :-( pas rien compris aux fuites de mémoire d'IE.
-- sm
WebShaker
Le 07/05/2010 12:00, SAM a écrit :
Comment virer tous ces objets? Est ce que un simple oHTMl.innerHTML = ''; va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
Ok super. c'est de loin le plus simple.
removeChild, il y a des chances que ça n'enlève rien de la mémoire (des fois que tu voudrais remettre ce child plus tard) ça s'appelle 'remove' pas 'suppress' ... ni 'delete' (on l'enlève mais ni le supprime ni l'efface)
Hum. alors la j'ai des doutes... supposons que tu ai un div (oDiv) contant plaine d'autre div. donc oDiv.innerHTML = ''; va virer tous les object fils... soit. mais comment tu vires oDiv ?
tu ne veut pas faire oDiv.parentNode.innerHTML = '' car tu ne souhaite pas virer ses frères mais uniquement lui.
Donc a mon avis, une fois le remove fait, si plus aucune variable javascript ne référence cet objet il devrait être supprimé.
Etienne
Le 07/05/2010 12:00, SAM a écrit :
Comment virer tous ces objets?
Est ce que un simple oHTMl.innerHTML = '';
va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
Ok super. c'est de loin le plus simple.
removeChild, il y a des chances que ça n'enlève rien de la mémoire
(des fois que tu voudrais remettre ce child plus tard)
ça s'appelle 'remove' pas 'suppress' ... ni 'delete'
(on l'enlève mais ni le supprime ni l'efface)
Hum.
alors la j'ai des doutes...
supposons que tu ai un div (oDiv) contant plaine d'autre div.
donc oDiv.innerHTML = '';
va virer tous les object fils... soit.
mais comment tu vires oDiv ?
tu ne veut pas faire oDiv.parentNode.innerHTML = '' car tu ne souhaite
pas virer ses frères mais uniquement lui.
Donc a mon avis, une fois le remove fait, si plus aucune variable
javascript ne référence cet objet il devrait être supprimé.
Comment virer tous ces objets? Est ce que un simple oHTMl.innerHTML = ''; va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
Ok super. c'est de loin le plus simple.
removeChild, il y a des chances que ça n'enlève rien de la mémoire (des fois que tu voudrais remettre ce child plus tard) ça s'appelle 'remove' pas 'suppress' ... ni 'delete' (on l'enlève mais ni le supprime ni l'efface)
Hum. alors la j'ai des doutes... supposons que tu ai un div (oDiv) contant plaine d'autre div. donc oDiv.innerHTML = ''; va virer tous les object fils... soit. mais comment tu vires oDiv ?
tu ne veut pas faire oDiv.parentNode.innerHTML = '' car tu ne souhaite pas virer ses frères mais uniquement lui.
Donc a mon avis, une fois le remove fait, si plus aucune variable javascript ne référence cet objet il devrait être supprimé.
Etienne
SAM
Le 5/7/10 1:59 PM, WebShaker a écrit :
Le 07/05/2010 12:00, SAM a écrit :
Comment virer tous ces objets? Est ce que un simple oHTMl.innerHTML = ''; va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
Ok super. c'est de loin le plus simple.
Le plus simple, le plus clean, le plus court en lignes de code, et peut-être le plus rapide ? (je ne sais si le DOM se reconstruit alors dans son entier en arrière-plan).
removeChild, il y a des chances que ça n'enlève rien de la mémoire (des fois que tu voudrais remettre ce child plus tard) ça s'appelle 'remove' pas 'suppress' ... ni 'delete' (on l'enlève mais ni le supprime ni l'efface)
Hum. alors la j'ai des doutes... supposons que tu ai un div (oDiv) contant plaine d'autre div. donc oDiv.innerHTML = ''; va virer tous les object fils... soit. mais comment tu vires oDiv ?
oDiv = null; non ?
tu ne veut pas faire oDiv.parentNode.innerHTML = '' car tu ne souhaite pas virer ses frères mais uniquement lui.
ben ... oDiv n'est pas le DIV du html, me semble t-il.
Si vraiment ça te chagrinne de garder un reliquat de div vide et définitivement plus utile :
Comment virer tous ces objets?
Est ce que un simple oHTMl.innerHTML = '';
va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
Ok super. c'est de loin le plus simple.
Le plus simple,
le plus clean,
le plus court en lignes de code,
et peut-être le plus rapide ?
(je ne sais si le DOM se reconstruit alors dans son entier en arrière-plan).
removeChild, il y a des chances que ça n'enlève rien de la mémoire
(des fois que tu voudrais remettre ce child plus tard)
ça s'appelle 'remove' pas 'suppress' ... ni 'delete'
(on l'enlève mais ni le supprime ni l'efface)
Hum.
alors la j'ai des doutes...
supposons que tu ai un div (oDiv) contant plaine d'autre div.
donc oDiv.innerHTML = '';
va virer tous les object fils... soit.
mais comment tu vires oDiv ?
oDiv = null;
non ?
tu ne veut pas faire oDiv.parentNode.innerHTML = '' car tu ne souhaite
pas virer ses frères mais uniquement lui.
ben ... oDiv n'est pas le DIV du html, me semble t-il.
Si vraiment ça te chagrinne de garder un reliquat de div vide et
définitivement plus utile :
... si on aime compliquer et s'assurer,
peut-être ?
(étant assez loin de ces préoccupations)
Donc a mon avis, une fois le remove fait, si plus aucune variable
javascript ne référence cet objet il devrait être supprimé.
Ce serait le plus probable, ou attendu mais ...
j'en sais rien.
Là c'est pour du Flash ( o = remove(o); o = null;) :
<http://flash.mediabox.fr/index.php?showtopic900>
(il y a bp d'infos sur le Net à propos de la mémoire en Flash)
mais Google arrive à trouver des trucs pour JS qui vont dans le sens que
je propose.
Aussi un truc à propos de la mémoire et ses fuites :
<http://flash.mediabox.fr/index.php?showtopic900>
dont l'Exhibit 11
Comment virer tous ces objets? Est ce que un simple oHTMl.innerHTML = ''; va me virer proprement tous les objects du DOM ?
beaucoup conseillent cette méthode
Ok super. c'est de loin le plus simple.
Le plus simple, le plus clean, le plus court en lignes de code, et peut-être le plus rapide ? (je ne sais si le DOM se reconstruit alors dans son entier en arrière-plan).
removeChild, il y a des chances que ça n'enlève rien de la mémoire (des fois que tu voudrais remettre ce child plus tard) ça s'appelle 'remove' pas 'suppress' ... ni 'delete' (on l'enlève mais ni le supprime ni l'efface)
Hum. alors la j'ai des doutes... supposons que tu ai un div (oDiv) contant plaine d'autre div. donc oDiv.innerHTML = ''; va virer tous les object fils... soit. mais comment tu vires oDiv ?
oDiv = null; non ?
tu ne veut pas faire oDiv.parentNode.innerHTML = '' car tu ne souhaite pas virer ses frères mais uniquement lui.
ben ... oDiv n'est pas le DIV du html, me semble t-il.
Si vraiment ça te chagrinne de garder un reliquat de div vide et définitivement plus utile :