6
votes

Est-ce que JavaScript est capable de décharger une image d'une page HTML?

J'aimerais savoir s'il est possible de décharger une image à partir d'une page HTML et de libérer son occupation de mémoire avec quelques instructions JavaScript. Disons qu'une image est déjà affichée à l'écran. Dis que j'ai besoin de le décharger pour sauvegarder la mémoire (la raison n'est pas pertinente ici). Puis-je le faire avec JavaScript?


3 commentaires

Vous pouvez supprimer l'image de Dom Tree mais son retrait de la mémoire n'est qu'à votre navigateur.


En suivant un suivi sur @DURI, les navigateurs détruiront des actifs non utilisés et libéreront la mémoire, bien qu'il n'y ait pas d'API pour ce niveau de contrôle du point de vue de l'utilisateur


Vous voudrez peut-être effectuer un étui d'essai avec une image énorme et regarder la consommation de mémoire du navigateur lors de la suppression. Faites-moi savoir, comment réagissent des navigateurs;)


3 Réponses :


3
votes
function removeElement(divNum) {
    var d = document.getElementById('myDiv');
    var olddiv = document.getElementById(divNum);
    d.removeChild(olddiv);
}

1 commentaires

Est-ce que cela obtient également des ordures collectées éventuellement si l'image n'est pas supprimée, l'attribut SRC n'est-il pas changé pour vider?



8
votes

Les commentaires sur votre question sont corrects, vous pouvez le supprimer de la DOM, mais le navigateur l'effacera de la mémoire lorsqu'il décide qu'il est bon et prêt.

Pour le refuser de la DOM, vous feriez quelque chose comme ceci: P>

var badImage = document.querySelector("img#idOfImage"); 
//or "img[href='nameofimagefile.jpeg']" 
//whatever you need to do to get the right element
//then, remove it:

badImage.parentElement.removeChild(badImage);


0 commentaires

1
votes

Vous pouvez libérer la mémoire d'un élément IMG en attribuant l'attribut SRC à un pixel 1x1 avant de le retirer.

const imgElement = document.querySelector(selector);
imgElement.setAttribute('src', '/images/pixel.gif');
imgElement.parentElement.removeChild(imgElement);


2 commentaires

Très proche de la réponse déjà acceptée comme réponse tardive, examinez si cela aidera OP.


Je viens de trouver cette réponse et j'ai pensé que c'était utile. La réponse acceptée ne supprime que l'élément de la DOM. La réponse de Shogo fait cela aussi, mais surtout, il tente de supprimer réellement l'image de la mémoire du navigateur (comme invitée à la demande) en définissant une nouvelle source d'image. Si vous supprimez simplement l'élément du DOM, il existe toujours dans la portée globale, avec la même image source (le navigateur le conservera probablement en mémoire) - par exemple, mettre fin à la réponse acceptée avec document.body.appendchild (badimage); et l'image reviendra tout de suite (au bas de la page).