Ostatnio robiłem wiele modalnych okien pop-up i co nie, do czego użyłem jQuery. Metoda, której użyłem do utworzenia nowych elementów na stronie, była w przeważającej mierze następująca:
$("<div></div>");
Mam jednak wrażenie, że nie jest to najlepsza ani najwydajniejsza metoda tego. Jaki jest najlepszy sposób tworzenia elementów w jQuery z perspektywy wydajności?
Ta odpowiedź zawiera punkty odniesienia do poniższych sugestii.
javascript
jquery
html
dom
Darko Z
źródło
źródło
Odpowiedzi:
Używam
$(document.createElement('div'));
testów porównawczych pokazuje, że ta technika jest najszybsza. Spekuluję, że dzieje się tak, ponieważ jQuery nie musi identyfikować go jako elementu i sam tworzyć elementu.Powinieneś naprawdę przeprowadzić testy porównawcze z różnymi silnikami Javascript i zważyć wyniki swoich odbiorców. Podejmij decyzję stamtąd.
źródło
appendTo
... Ponieważ komentarze były oczywiście błędne, usunąłem je.osobiście sugerowałbym (dla czytelności):
niektóre liczby dotyczące dotychczasowych sugestii (safari 3.2.1 / mac os x):
źródło
Pytanie:
Odpowiedź:
Ponieważ chodzi o
jQuery
to, myślę, że lepiej jest zastosować to (czyste) podejście (używasz)PRÓBNY.
W ten sposób można nawet używać procedur obsługi zdarzeń dla określonego elementu, takiego jak
PRÓBNY.
Ale gdy masz do czynienia z wieloma elementami dynamicznymi, powinieneś unikać dodawania zdarzenia
handlers
do konkretnego elementu, zamiast tego powinieneś użyć delegowanego modułu obsługi zdarzeń, takiego jakPRÓBNY.
Tak więc, jeśli utworzysz i dodasz setki elementów o tej samej klasie, tj. (
myClass
), Wówczas zajmie się mniej pamięci do obsługi zdarzeń, ponieważ tylko jeden moduł obsługi będzie mógł wykonać zadanie dla wszystkich dynamicznie wstawianych elementów.Aktualizacja: Ponieważ możemy użyć następującego podejścia do utworzenia elementu dynamicznego
Ale tego
size
atrybutu nie można ustawić za pomocą tego podejścia za pomocąjQuery-1.8.0
lub później, a oto stary raport o błędach , spójrz ten przykład za pomocą,jQuery-1.7.2
który pokazuje, żesize
atrybut jest ustawiony na30
powyższy przykład, ale za pomocą tego samego podejścia, którego nie możemy ustawićsize
za pomocą atrybutujQuery-1.8.3
, tutaj to niedziałające skrzypce . Aby ustawićsize
atrybut, możemy zastosować następujące podejścieAlbo ten
Możemy przekazać
attr/prop
jako obiekt podrzędny, ale to działa wjQuery-1.8.0 and later
wersjach sprawdzić ten przykład , ale to nie będzie działać wjQuery-1.7.2 or earlier
(nie testowane we wszystkich wcześniejszych wersjach).BTW, wzięte z
jQuery
raportu o błędzieZalecili stosowanie następującego podejścia ( działa również we wcześniejszych , przetestowano w
1.6.4
)Lepiej więc zastosować to podejście, IMO. Ta aktualizacja jest wykonywana po przeczytaniu / znalezieniu tej odpowiedzi, a ta odpowiedź pokazuje, że jeśli używasz
'Size'(capital S)
zamiast'size'
niej, będzie ona działać dobrze , nawet wversion-2.0.2
Przeczytaj także o rekwizytach , ponieważ istnieje różnica,
Attributes vs. Properties
różni się w zależności od wersji.źródło
$('<div>', {...})
którym mijasz obiekt, który zawiera wszystkie atrybuty, i$('<div>').attr({...})
tworzysz element bez żadnych atrybutów, ale ustawiasz atrybuty za pomocąattr()
metody później.jQuery.com
stronę internetową może być pomocna @RafaelRuizTabares lub google :-)W rzeczywistości, jeśli robisz
$('<div>')
, jQuery również będzie używaćdocument.createElement()
.(Spójrz tylko na linię 117 ).
Istnieje pewien narzut wywołania funkcji, ale o ile wydajność nie jest krytyczna (tworzysz setki [tysięcy] elementów), nie ma większego powodu, aby powracać do zwykłego DOM .
Po prostu tworzenie elementów dla nowej strony internetowej jest prawdopodobnie przypadkiem, w którym najlepiej trzymać się jQuery sposobu robienia rzeczy.
źródło
Jeśli masz dużo treści HTML (więcej niż tylko jeden div), możesz rozważyć wbudowanie HTML w stronę w ukrytym pojemniku, a następnie zaktualizowanie go i udostępnienie w razie potrzeby. W ten sposób duża część znaczników może zostać wstępnie przeanalizowana przez przeglądarkę i uniknąć zakłócania się przez JavaScript po wywołaniu. Mam nadzieję że to pomoże!
źródło
To nie jest poprawna odpowiedź na pytanie, ale nadal chciałbym się tym podzielić ...
Używanie tylko
document.createElement('div')
i pomijanie JQuery znacznie poprawi wydajność, jeśli chcesz tworzyć wiele elementów w locie i dołączać do DOM.źródło
Myślę, że używasz najlepszej metody, ale możesz ją zoptymalizować, aby:
źródło
Nie potrzebujesz surowej wydajności z operacji, którą wykonujesz niezwykle rzadko z punktu widzenia procesora.
źródło
jQuery(html :: String)
metody jest całkowicie w porządku. Chyba że sytuacja jest bardzo nietypowe, jeden będzie mało prawdopodobne, aby osiągnąć lepsze postrzeganie wydajność. Wydaj energię optymalizacyjną na skrzynki, które mogłyby z niej skorzystać. Ponadto jQuery jest zoptymalizowany pod kątem prędkości na wiele sposobów. Rób z nim zdrowe rzeczy i zaufaj, ale sprawdź, czy jest szybki.Musisz zrozumieć, że znaczenie wydajności tworzenia elementów nie ma znaczenia w kontekście używania jQuery.
Pamiętaj, że nie ma prawdziwego celu tworzenia elementu, chyba że faktycznie go użyjesz.
Możesz pokusić się o przetestowanie wydajności czegoś takiego jak
$(document.createElement('div'))
vs.$('<div>')
i uzyskać duży wzrost wydajności dzięki użyciu,$(document.createElement('div'))
ale to tylko element, którego jeszcze nie ma w DOM.Jednak pod koniec dnia i tak będziesz chciał użyć tego elementu, więc prawdziwy test powinien obejmować np. .dołączyć do();
Zobaczmy, jeśli przetestujesz między sobą następujące elementy:
Zauważysz, że wyniki będą się różnić. Czasami jeden sposób jest lepszy od drugiego. A to tylko dlatego, że liczba zadań w tle na komputerze zmienia się z czasem.
Sprawdź się tutaj
Tak więc pod koniec dnia chcesz wybrać najmniejszy i najbardziej czytelny sposób tworzenia elementu. W ten sposób przynajmniej Twoje pliki skryptowe będą najmniejsze. Prawdopodobnie bardziej znaczący czynnik na punkcie wydajności niż sposób tworzenia elementu przed użyciem go w DOM.
źródło
document.getElementById('target).appendChild(document.createElement('div'));
Ktoś już dokonał testu porównawczego: jQuery document.createElement?
$(document.createElement('div'))
jest wielkim zwycięzcą.źródło
Jednym z punktów jest to, że może być łatwiej zrobić:
Następnie wykonaj to wszystko za pomocą wywołań jquery.
źródło
Korzystam z jquery.min v2.0.3. Lepiej jest dla mnie użyć następujących:
jak następuje:
Czas przetwarzania pierwszego kodu jest znacznie krótszy niż drugiego kodu.
źródło