2013-03-10 11 views
6

Witam, powoli wprowadzam rozszerzenie chrome i muszę przeanalizować niektóre dane zawierające encje html i muszę je rozszyfrować. Widziałem w odpowiedzi tutaj, że mogę używać document.createElement dla niego, więc zrobiłem to:Czy elementy utworzone za pomocą document.createElement pozostają w pamięci?

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

Jednak obawiam się, że document.createElement pozostawia elementów z tyłu, ponieważ funkcja ta działa na skrypcie tle, więc nie jest to podoba często się odświeża i działa około 35 000 razy co 5 minut.

Czy elementy stworzone przez document.createElement zostaną zwolnione, czy też zostaną? To znaczy, nie dołączam ich nigdzie i są one przypisane zmiennej lokalnej, ale nie jestem pewien.

+1

Jasne, nic już nie odwołuje się do div po uruchomieniu funkcji, więc zostanie ostatecznie zbuforowana. – Bergi

Odpowiedz

1

Zostaną zebrane śmieci. W szczególności, odkąd opracowujesz rozszerzenie Chrome, V8 ma tendencję do bardzo szybkiego recyklingu plików tymczasowych, więc nie powinno to stanowić problemu.

Jeśli obawiasz się o to w ogóle, jednym z powszechnych rozwiązań jest po prostu utrzymanie pojedynczego elementu div do wykonania pracy.

+0

Zgaduję, że masz rację, zastanawiałem się tylko, czy utworzony element może utknąć gdzieś w dokumencie. Chciałem uniknąć tworzenia div, ale może być jeszcze lepiej, ponieważ dosłownie, jest wywoływane ponad 35k razy, a może tworzenie elementu po elemencie jest gorsze, nawet jeśli zostaną zebrane. – Goodwine

+1

Jeśli martwisz się wydajnością, utworzenie pojedynczego elementu div i ponowne jego użycie będzie prawdopodobnie bardziej wydajne. Nie mogę powiedzieć na pewno, ponieważ Chrome może być na tyle sprytny, aby mieć gotowy element div, jeśli uzna, że ​​często go tworzysz. Jeśli utworzysz element z 'document.createElement', nie zostanie on dołączony do dokumentu, chyba że wyraźnie to zrobisz, więc gdy tylko twoja funkcja zwróci tutaj, pozostało 0 referencji, a ponieważ funkcja była lokalna i nie została gdzie indziej V8 natychmiast ją odzyska, IIRC. –

Powiązane problemy