teraz większość ludzi na tej stronie są prawdopodobnie świadomi, że:Dlaczego nie skorzystać z delegowania zdarzeń JavaScript do ekstremum?
$("#someTable TD.foo").click(function(){
$(e.target).doSomething();
});
zamierza wykonać znacznie gorsze niż:
$("#someTable").click(function(){
if (!$(e.target).is("TD.foo")) return;
$(e.target).doSomething();
});
Teraz ile gorzej będzie oczywiście zależeć od tego, ile TDS stole ma, ale ta ogólna zasada powinna obowiązywać, o ile masz co najmniej kilka niszczycieli czołgów. (UWAGA: Oczywiście mądrą rzeczą byłoby użycie delegata jQuery zamiast powyższego, ale ja po prostu próbowałem zrobić przykład z oczywistym zróżnicowaniem).
W każdym razie wyjaśniłem tę zasadę współpracownikowi, a ich odpowiedź brzmiała: "Cóż, w przypadku składników obejmujących całą witrynę (np. INPUT wybierających datę), dlaczego warto tam zatrzymać? Dlaczego nie po prostu połączyć jednego handlera dla każdego typu? elementu do samego CIAŁA? " Nie miałem dobrej odpowiedzi.
Oczywiście użycie strategii delegacji oznacza ponowne przemyślenie sposobu blokowania zdarzeń, więc to jedna z wad. Ponadto hipotetycznie mogłaby mieć stronę, na której masz "TD.foo", że nie powinien mieć zajęte zdarzenia do niego. Ale jeśli zrozumiesz i będziesz skłonny pracować nad wydarzeniem, które się zmienia, i jeśli wymuszasz politykę: "jeśli umieścisz .foo na TD, ZAWSZE zacznie się to wydarzenie", żadne z nich nie wydaje się być Wielka rzecz.
Czuję, że muszę czegoś przeoczyć, więc moje pytanie brzmi: czy istnieje jakaś inna wada polegająca na delegowaniu wszystkich zdarzeń dla wszystkich elementów składowych całej witryny do BODY (w przeciwieństwie do wiązania ich bezpośrednio z elementami HTML) lub delegowanie ich do elementu macierzystego innego niż BODY)?
wierzę, że jest to kwestia preferencji i scenariusz po wypadku . Mam na myśli to, że powinieneś najpierw napisać kod, aby był możliwie jak najbardziej czytelny. W ten sposób Ty lub ktoś inny może przyjść i zbadać kod później i mieć łatwy czas z nim. Gdy to zrobisz, możesz sprawdzić, czy kod działa dobrze i zoptymalizować go w razie potrzeby. W twoim konkretnym scenariuszu $ ("someTable TD.foo") jest łatwiejsze do odczytania, zarządzania i śledzenia niż scenariusz ze zwrotem w nim. Ktoś może przeczytać drugi kod i zinterpretować go, powodując, że wprowadzają błędy wraz ze zmianami. Tylko moja opinia: – evasilchenko
Jestem w całkowitej i całkowitej zgodzie: programiści powinni zaprojektować najpierw, nie martwiąc się o optymalizację, i tylko później optymalizować odpowiednio. Jednak cała ta sprawa wyszła z rzeczywistej potrzeby zoptymalizowania istniejącego projektu (mieliśmy świetną stronę, dopóki nasi klienci nie zdecydowali się jej użyć w tysiącach wierszy), więc staraliśmy się wymyślić najlepszą strategię aby obsłużyć tę optymalizację. – machineghost
możliwy duplikat [Czy wszystkie zdarzenia jquery powinny być powiązane z $ (dokument)?] (Http://stackoverflow.com/q/12824549/1048572) – Bergi