Zaczynam projekt od jQuery.
Jakie pułapki / błędy / nieporozumienia / nadużycia / nadużycia miałeś w swoim projekcie jQuery?
javascript
jquery
flybywire
źródło
źródło
Odpowiedzi:
Nieświadomość wydajności i nadużywanie selektorów zamiast przypisywania ich do zmiennych lokalnych. Na przykład:-
Zamiast:-
Lub jeszcze lepiej z łańcuchem :
Uznałem to za oświecający moment, kiedy zdałem sobie sprawę, jak działają stosy połączeń.
Edycja: uwzględniono sugestie w komentarzach.
źródło
var $label = $('#label');
Dowiedz się, jak korzystać z kontekstu. Zwykle selektor jQuery przeszuka cały dokument:
Ale możesz przyspieszyć, wyszukując w kontekście:
źródło
[0]
.$('.myClass', ct);
lub jeśli wiesz, że ct jest instancją jQuery, możesz użyć findct.find(".myClass")
Nie używaj czystych selektorów klas, takich jak to:
Spowoduje to, że spojrzymy na każdy element, aby sprawdzić, czy ma on klasę „przycisku”.
Zamiast tego możesz pomóc, na przykład:
Nauczyłem się tego w zeszłym roku z bloga Rebecca Murphy
Aktualizacja - Ta odpowiedź została udzielona ponad 2 lata temu i jest niepoprawna dla bieżącej wersji jQuery. Jeden z komentarzy zawiera test, aby to udowodnić. Istnieje również zaktualizowana wersja testu, która zawiera wersję jQuery w momencie odpowiedzi.
źródło
$('.b')
można użyć,document.getElementsByClassName('b')
jeśli przeglądarka go obsługuje, ale$('a.b')
spowoduje to, że uzyska wszystkie pasujące elementy z klasą,b
a następnie potwierdzi, że są kotwicami w operacji dwuetapowej. To ostatnie wydaje mi się więcej pracy. Dla prawdziwej analogii z życia spróbuj tego: Znajdź wszystkie skarpetki w moim pokoju. Teraz wyrzuć te, których nie ma w mojej komodzie.Spróbuj podzielić anonimowe funkcje, aby móc ich ponownie użyć.
źródło
(anonymous)
. Przeczytaj więcej na ten temat tutaj: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…Widziałem setki wierszy kodu w instrukcji ready doc. Brzydki, nieczytelny i niemożliwy do utrzymania.
źródło
Korzystając z
$.ajax
funkcji żądań Ajax do serwera, należy unikać używaniacomplete
zdarzenia do przetwarzania danych odpowiedzi. Uruchomi się, czy żądanie zakończyło się powodzeniem, czy nie.Zamiast tego
complete
użyjsuccess
.Zobacz Wydarzenia Ajax w dokumentacji.
źródło
„Łączenie” wydarzeń animacyjnych z wywołaniami zwrotnymi.
Załóżmy, że chcesz animować akapit znikający po kliknięciu. Chciałeś też później usunąć element z DOM. Możesz pomyśleć, że możesz po prostu połączyć metody:
W tym przykładzie funkcja .remove () zostanie wywołana przed zakończeniem funkcji .fadeOut (), niszcząc efekt stopniowego zanikania i powodując natychmiastowe zniknięcie elementu. Zamiast tego, jeśli chcesz uruchomić polecenie dopiero po zakończeniu poprzedniego, użyj funkcji wywołania zwrotnego:
Drugi parametr .fadeOut () to anonimowa funkcja, która uruchomi się po zakończeniu animacji .fadeOut (). To powoduje stopniowe zanikanie, a następnie usunięcie elementu.
źródło
Jeśli powiążesz to samo wydarzenie wiele razy, zostanie ono wywołane wiele razy. Zazwyczaj zawsze chodzę
unbind('click').bind('click')
po prostu dla bezpieczeństwaźródło
Nie nadużywaj wtyczek.
W większości przypadków potrzebujesz tylko biblioteki i być może interfejsu użytkownika. Jeśli uprościsz to, na dłuższą metę będziesz w stanie utrzymać kod. Nie wszystkie wtyczki są obsługiwane i obsługiwane, w rzeczywistości większość nie. Jeśli możesz naśladować funkcjonalność za pomocą podstawowych elementów, zdecydowanie ją polecam.
Wtyczki można łatwo wstawić do kodu, oszczędzając trochę czasu, ale kiedy potrzebujesz czegoś dodatkowego, modyfikowanie ich jest kiepskie, ponieważ tracisz możliwe aktualizacje. Oszczędność czasu na początku stracisz później na zmianie przestarzałych wtyczek.
Wybierz mądrze używane wtyczki. Oprócz biblioteki i interfejsu użytkownika stale używam $ .cookie , $ .form , $ .validate i thickbox . Co do reszty, głównie tworzę własne wtyczki.
źródło
Pitfall: Używanie pętli zamiast selektorów.
Jeśli okaże się, że sięgasz po metodę jQuery '.each' w celu iteracji elementów DOM, zastanów się, czy możesz użyć selektora, aby uzyskać elementy zamiast tego.
Więcej informacji na temat selektorów jQuery:
http://docs.jquery.com/Selectors
Pitfall: NIE przy użyciu narzędzia takiego jak Firebug
Firebug został praktycznie stworzony do tego rodzaju debugowania. Jeśli masz zamiar bawić się w DOM za pomocą Javascript, potrzebujesz dobrego narzędzia, takiego jak Firebug, aby zapewnić Ci widoczność.
Więcej informacji o Firebug: http://getfirebug.com/
Inne świetne pomysły znajdują się w tym odcinku podcastu polimorficznego: (jQuery Secrets with Dave Ward) http://polymorphicpodcast.com/shows/jquery/
źródło
Nieporozumienie dotyczące używania tego identyfikatora we właściwym kontekście. Na przykład:
A tutaj jedna z próbek, jak możesz to rozwiązać:
źródło
Unikaj przeszukiwania całego DOM kilka razy. Jest to coś, co naprawdę może opóźnić twój skrypt.
Zły:
Dobry:
Zły:
Dobry:
źródło
Zawsze buforuj $ (this) do znaczącej zmiennej, szczególnie w .each ()
Lubię to
źródło
$self
lub$this
jeśli jesteś zbyt leniwy, aby wymyślić dobrą nazwę zmiennej.Podobne do tego, co powiedział Repo Man, ale nie do końca.
Podczas tworzenia formularzy Win ASP.NET często to robię
zapominając o znaku #. Prawidłowa forma to
źródło
Wydarzenia
nie klonuje żadnego z wydarzeń - musisz je ponownie powiązać.
Zgodnie z komendą JP - clone () ponownie wiąże zdarzenia, jeśli przejdziesz true.
źródło
Unikaj wielokrotnego tworzenia tych samych obiektów jQuery
źródło
$this = $(this);
osobną linię. Jeśli możesz (bez bałaganu), zapomnij o wszystkim$this
i po prostu$(this).fadeIn().fadeIn();
Mówię to również dla JavaScript, ale jQuery, JavaScript NIGDY nie powinna zastępować CSS.
Upewnij się także, że witryna nadaje się dla osób, które mają wyłączoną obsługę JavaScript (dziś nie jest tak aktualna jak w przeszłości, ale zawsze miło jest mieć w pełni użyteczną stronę).
źródło
Robienie zbyt wielu manipulacji DOM. Chociaż metody .html (), .append (), .prepend () itd. Są świetne, ze względu na sposób, w jaki przeglądarki renderują i renderują strony, ich zbyt częste używanie spowoduje spowolnienie. Często lepiej jest utworzyć HTML jako ciąg znaków i dołączyć go do DOM jeden raz, zamiast wielokrotnie zmieniać DOM.
Zamiast:
Spróbuj tego:
Lub nawet to ($ wrapper to nowo utworzony element, który nie został jeszcze wstrzyknięty do DOM. Dołączanie węzłów do tego div div otoki nie powoduje spowolnienia, a na końcu dodajemy $ wrapper do $ parent, używając tylko jednej manipulacji DOM ):
źródło
Użycie ClientID do uzyskania „rzeczywistego” identyfikatora kontroli w projektach ASP.NET.
Ponadto, jeśli używasz jQuery w SharePoint, musisz wywołać jQuery.noConflict ().
źródło
Przekazywanie identyfikatorów zamiast obiektów jQuery do funkcji:
Przekazywanie zapakowanego zestawu jest znacznie bardziej elastyczne:
źródło
Nadmierne stosowanie łańcuchów.
Zobacz:
Wyjaśnienie
źródło
Używaj strun w stylu akumulatorowym
Za pomocą operatora + tworzony jest nowy ciąg w pamięci i przypisywana mu jest połączona wartość. Dopiero potem wynik jest przypisywany do zmiennej. Aby uniknąć zmiennej pośredniej dla wyniku konkatenacji, możesz bezpośrednio przypisać wynik za pomocą operatora + =. Powolny:
Szybciej:
Operacje pierwotne mogą być szybsze niż wywołania funkcji
Rozważ zastosowanie alternatywnej operacji pierwotnej nad wywołaniami funkcji w pętlach i funkcjach krytycznych pod względem wydajności. Powolny:
Szybciej:
Przeczytaj więcej na temat najlepszych praktyk dotyczących wydajności JavaScript
źródło
Jeśli chcesz, aby użytkownicy widzieli encje html w swojej przeglądarce, użyj „html” zamiast „text”, aby wstrzyknąć ciąg znaków Unicode, na przykład:
źródło
moje dwa centy)
Zazwyczaj praca z jquery oznacza, że nie musisz martwić się o elementy DOM przez cały czas. Możesz napisać coś takiego -
$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})
- a ten kod zostanie wykonany bez zgłaszania błędów.W niektórych przypadkach jest to przydatne, w niektórych przypadkach - wcale, ale faktem jest, że jquery jest zazwyczaj przyjazna dla pustych dopasowań. Jeszcze,
replaceWith
błąd, jeśli spróbuje się go użyć z elementem, który nie należy do dokumentu. Uważam to za raczej sprzeczne z intuicją.Inną pułapką jest, moim zdaniem, kolejność węzłów zwróconych metodą prevAll () -
$('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()
. Właściwie to nic wielkiego, ale powinniśmy pamiętać o tym fakcie.źródło
Jeśli planujesz Ajax z dużą ilością danych, na przykład 1500 wierszy tabeli z 20 kolumnami, to nawet nie myśl o użyciu jQuery do wstawienia tych danych do kodu HTML. Użyj zwykłego JavaScript. jQuery będzie działał zbyt wolno na wolniejszych komputerach.
Ponadto, połowę czasu jQuery zrobi rzeczy, które spowodują, że będzie wolniejszy, jak na przykład parsowanie tagów skryptowych w przychodzącym HTML i radzenie sobie z dziwactwami przeglądarki. Jeśli chcesz szybko wstawiać, trzymaj się zwykłego JavaScript.
źródło
.innerHTML
stanie. Ale jeśli budujesz coś takiego jak Gmail, w którym użytkownik utrzymuje kartę otwartą przez wiele godzin, będziesz musiał po prostu ugryźć kulę i poradzić sobie z dodatkową powolnością. Dla ciekawskich, oto dokładnie to, co.html()
robi jQuery : james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.htmlKorzystanie z jQuery w małym projekcie, który można ukończyć za pomocą zaledwie kilku wierszy zwykłego JavaScript.
źródło
couple of lines of ordinary JavaScript
Pewnie nie ma problemu. Ale kiedy to jest właśnie to? Ludzie, którzy mówią „dlaczego nie używać javascript waniliowy?” nie został jeszcze wystarczająco ugryziony przez IE ... i nie wspominając o tym, ile kodu cruft i bojlerów musisz napisać, aby robić proste rzeczy w zwykłym starym JS.Niezrozumienie wiążącego zdarzenia. JavaScript i jQuery działają inaczej.
Według popularnego zapotrzebowania przykład:
W jQuery:
Bez jQuery:
Zasadniczo haki wymagane dla JavaScript nie są już potrzebne. Korzystam z wbudowanych znaczników (onClick itp.), Ponieważ możesz po prostu użyć identyfikatorów i klas, które programista zwykle wykorzystuje do celów CSS.
źródło