2013-03-03 13 views
20

Jestem zdezorientowany, jeśli chodzi o styl pisania kodu. Chcę wiedzieć, która metoda jest skuteczna, aby wstawić znacznik HTML do dokumentu.javascript document.createElement lub znaczniki HTML

Javascript:

document.getElementById('demoId').innerHTML='<div>hello world and <a>click me</a> also</div>'; 

LUB

var itd=document.createElement('div'), 
    ita=document.createElement('a'), 
    idt=document.createTextNode('hello world'); 
    iat=document.createTextNode('click me'); 
    idn=document.createTextNode('also'); 

    ita.appendChild(iat); 
    itd.appendChild(idt); 
    itd.appendChild(ita); 
    itd.appendChild(idn) 

    docuemtn.getElementById('demoId').appendChild(itd); 

Jaki jest najszybszy i najlepszy sposób?

+0

Dlaczego chcesz tworzyć tagi HTML w ten sposób? – Supplement

+0

można zrobić profilowanie skryptów Java w Chrome, aby zmierzyć to – user1428716

+4

Wszyscy prawdopodobnie powiedzą, że jestem szalony, ale jeśli zrobiłeś tę stronę, a potem musiałem ją zachować, wolałbym użyć opcji 1 i uniknąć opcji 2 dla tak długo jak to tylko możliwe. Ponadto nie mogę sobie wyobrazić opcji 2, która byłaby szybsza niż opcja 1. –

Odpowiedz

21

Cóż, pomyśl tylko, co każdy z nich robi. Pierwszym z nich jest pobranie ciągu, przeanalizowanie go, a następnie wywołanie document.createElement, , itp. (Lub podobnych metod) na podstawie danych wyjściowych z analizowanego ciągu. Druga polega na zmniejszeniu obciążenia pracą przeglądarki, ponieważ bezpośrednio mówisz, co chcesz zrobić.

See a comparison on jsPerf

jsPerf Według wariantu 1 do około 3 razy mniejsza od wariantu 2.

Jeśli chodzi o łatwość konserwacji, opcja 1 jest o wiele łatwiejsza do napisania, ale zadzwoń do mnie staromodną, ​​wolałbym użyć opcji 2, ponieważ jest po prostu bezpieczniejsza.

Edit

Po kilku wyniki zaczęły napływać, różniące się wyniki wzbudził moją ciekawość. Dwa razy uruchomiłem test z każdą zainstalowaną przeglądarką. Oto zrzut wyników z jsPerf po wszystkich testach (operacje/drugie, wyższe są lepsze).

jsPerf results

Więc przeglądarek wydają się znacznie różnić w jaki sposób poradzić sobie dwie techniki. Wydaje się, że opcja 2 wydaje się szybsza ze względu na Chrome i opcję dużej luki w przeglądarce Safari 2. Wnioskuję, że powinniśmy po prostu użyć tego, co najbardziej wygodne lub najlepiej pasuje do standardów organizacji, a nie martwić się, która z nich jest bardziej wydajna.

Najważniejsze to ćwiczenie nauczyło mnie to nie używać IE10 mimo wielkich rzeczy słyszałem o nim.

+1

warto było dowiedzieć się o tej stronie. –

+0

To całkiem niesamowite :) po raz drugi go użyłem. –

+3

Nie mogłem zrozumieć, dlaczego to prawda, sprawdź ten post, jest bardzo pouczające: http://stackoverflow.com/questions/2305654/innerhtml-vs-appendchildtxtnode –

Powiązane problemy