2013-03-10 1 views
6

Ciao, sto lentamente facendo un'estensione per Chrome, e ho bisogno di analizzare alcuni dati che contengono entità html, e ho bisogno di decodificarlo. Ho visto in una risposta qui che ho potuto usare document.createElement per esso, così ho fatto questo:Gli elementi creati con document.createElement rimangono in memoria?

htmlDecode: function(input) { 
    if(/[<>]/.test(input)) { // To avoid creating tags like <script> :s 
     return "Invalid Input"; 
    } 
    var e = document.createElement('div'); 
    e.innerHTML = input; 
    return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; 
} 

Comunque io sono preoccupato che document.createElement lascia elementi dietro perché questa funzione viene eseguito sul sceneggiatura sfondo, quindi non è come viene aggiornato spesso e viene eseguito circa 35000 volte ogni 5 minuti.

Quindi, gli elementi creati da document.createElement vengono liberati o rimangono? Voglio dire, non li aggiungo da nessuna parte e vengono assegnati a una variabile locale, ma non ne sono sicuro.

+1

Certo, nulla fa riferimento al div più dopo che la funzione è stata eseguita, quindi verrà raccolta alla fine. – Bergi

risposta

1

Saranno raccolti i rifiuti. In particolare, dal momento che stai sviluppando un'estensione di Chrome, V8 tende a riciclare temporanee come questa molto rapidamente, quindi non dovrebbe essere un problema.

Se si è preoccupati di questo in generale, una soluzione comune è semplicemente mantenere un singolo div in giro per fare il lavoro.

+0

Immagino che tu abbia ragione, mi stavo chiedendo se l'elemento creato potrebbe rimanere bloccato da qualche parte nel documento. Volevo evitare di creare un div, tuttavia potrebbe essere anche meglio perché letteralmente viene chiamato oltre 35k volte e forse la creazione di elementi dopo elemento è peggiore anche se vengono raccolti. – Goodwine

+1

Se sei preoccupato per le prestazioni, creare un singolo div e riutilizzarlo sarebbe probabilmente più efficiente. Non posso dirlo con certezza perché Chrome potrebbe essere abbastanza intelligente da far sì che un div sia pronto per te nel caso in cui determini di crearli spesso. Se crei un elemento con 'document.createElement', non verrà aggiunto al documento se non lo fai esplicitamente, quindi non appena la tua funzione ritorna qui, ha 0 riferimenti rimanenti e dato che era funzione locale e non riferita altrove, V8 lo reclamerà immediatamente, IIRC. –