2013-03-10 10 views
6

Hallo, ich mache langsam eine Chrome-Erweiterung, und ich muss einige Daten analysieren, die HTML-Entities enthält, und ich muss es dekodieren. Ich sah in einer Antwort hier, dass ich document.createElement dafür verwenden könnte, also tat ich dies:Bleiben Elemente, die mit document.createElement erstellt wurden, im Speicher?

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; 
} 

aber ich mache mir Sorgen, dass document.createElement Elemente hinter sich lässt, da diese Funktion auf dem Hintergrund Skript ausgeführt wird, so dass er es ist nicht, wie wird oft aktualisiert und läuft alle 5 Minuten rund 35000 Mal.

Also, werden die von document.createElement erstellten Elemente freigegeben, oder bleiben sie? Ich meine, ich füge sie nirgends an und sie sind einer lokalen Variable zugeordnet, aber ich bin mir nicht sicher.

+1

Sicher, nichts referenziert das Div mehr, nachdem die Funktion ausgeführt wurde, so dass es schließlich Müll gesammelt wird. – Bergi

Antwort

1

Sie werden Müll gesammelt werden. Insbesondere da Sie eine Chrome-Erweiterung entwickeln, neigt V8 dazu, solche Provisorien sehr schnell wiederzuverwenden, so dass es keine große Rolle spielt.

Wenn Sie sich im Allgemeinen darum sorgen, ist eine übliche Lösung, einfach ein einzelnes div zu halten, um die Arbeit zu erledigen.

+0

Ich denke, Sie haben Recht, ich habe mich nur gefragt, ob das erstellte Element irgendwo im Dokument stecken bleiben könnte. Ich wollte es vermeiden, ein Div zu erstellen, aber es könnte sogar noch besser sein, weil es wörtlich über 35k Mal aufgerufen wird, und vielleicht ist das Erstellen von Element für Element schlimmer, selbst wenn sie gesammelt werden. – Goodwine

+1

Wenn Sie sich Sorgen um die Leistung machen, ist es wahrscheinlich effizienter, ein einzelnes Div zu erstellen und es erneut zu verwenden. Ich kann nicht mit Sicherheit sagen, dass Chrome schlau genug sein könnte, ein div für dich bereit zu halten, falls es dich bestimmt, dass du es oft erstellst. Wenn Sie ein Element mit "document.createElement" erstellen, wird es nicht an das Dokument angehängt, es sei denn, Sie tun dies explizit. Sobald Ihre Funktion hier zurückkehrt, bleiben 0 Referenzen übrig, da sie lokal funktional war und nicht verwiesen wurde anderswo wird V8 es sofort zurückfordern, IIRC. –

Verwandte Themen