Czy plik $ (document). Jest już potrzebny?


111

Widziałem to pytanie w stackoverflow, ale nie czuję, że w ogóle zostało udzielone.

Jest $(document).readykonieczne?

Łączę wszystkie moje skrypty javascriptu na dole strony, więc teoretycznie wszystkie one działają, gdy dokument jest gotowy.


3
Starsze przeglądarki mogą nie cieszyć się równoległym pobieraniem, którego używają nowsze przeglądarki. To jest główny powód, dla którego twoje skrypty są umieszczane na dole. W szczególności pozwala na renderowanie HTML i CSS jako pierwsze w starszych przeglądarkach. W tym momencie możesz wybrać, w jaki sposób chcesz wyczuć, że DOM jest załadowany. Dwie popularne metody uruchamiania js to window.onload i $ (document) .ready (w połączeniu z jQuery). Istnieją inne opcje i łatwe do wyszukania, oczywiste wady window.onload. Chodzi o to, że $ (dokument). Już działa częściej niż nie i jest łatwy w użyciu.
BradChesney79

Odpowiedzi:


125

Jest $(document).readykonieczne?

Nie

jeśli umieściłeś wszystkie swoje skrypty tuż przed </body>tagiem zamykającym, zrobiłeś dokładnie to samo.

Dodatkowo, jeśli skrypt nie potrzebuje dostępu do DOM, nie ma znaczenia, gdzie zostanie załadowany, poza możliwymi zależnościami od innych skryptów.

W przypadku wielu systemów CMS nie masz dużego wyboru miejsca ładowania skryptów, więc jest to dobra forma dla modularnego kodu do wykorzystania document.readyzdarzenia. Czy na pewno chcesz wrócić i debugować stary kod, jeśli użyjesz go ponownie w innym miejscu?

poza tematem:

Na marginesie: powinieneś używać jQuery(function($){...});zamiast, $(document).ready(function(){...});ponieważ wymusza to na aliasie $.


Czy na pewno jest to „dokładnie to samo”? Miałem wrażenie, że Twój css (lub inny kod ładowany równolegle z głównym html) może nie zostać jeszcze w pełni przeanalizowany.
Zach Lysobey

6
@ZachL, dokument może być gotowy przed pełnym przeanalizowaniem CSS. document.ready nie jest tym samym, co onloadzdarzenie, w którym zakończyło się ładowanie obrazów i innych zasobów zewnętrznych.
zzzzBov

Dziękuję za wyjaśnienie.
Zach Lysobey

5
To „nie” tylko kosztowało mnie 3 godziny pracy .. po prostu upewnij się u dont błąd </ body> z <body> :)
teejay

1
Niekoniecznie jednak zgadzam się na wymuszanie aliasu, zwłaszcza jeśli noConflict()z jakiegoś powodu trzeba go użyć.
Jay Blanchard,

22

Nie, jeśli twój javascript jest ostatnią rzeczą przed zamknięciem, nie musisz dodawać tych tagów.

Na marginesie, skrót $ (document) .ready to poniższy kod.

$(function() {
// do something on document ready
});

To pytanie może być dobre. Przeczytałeś to? jQuery: Po co używać document.ready, jeśli zewnętrzny JS na dole strony?


6
Zasadnicze pytanie brzmi: „Czy w ogóle potrzebuję gotowego dokumentu, kiedy umieszczam moje skrypty na dole treści?”, A nie „Czy istnieje skrót do pisania $(document).ready()”.
nnnnnn

4

Nie, nie jest to konieczne, pod warunkiem, że wiesz, że nie dzieją się żadne odroczone rzeczy - iw większości przypadków będziesz wiedział, czy rozwinąłeś to, nad czym pracujesz, od góry do dołu.

- Kiedy wprowadzasz kod kogoś innego, bez dokładnego sprawdzania go, nie wiesz.

Więc zadaj sobie pytanie, czy używasz frameworka lub edytora, który pomaga ci w tworzeniu struktury? Czy wprowadzasz kod innej osoby i nie zadałeś sobie trudu, aby przeczytać każdy plik? Czy chcesz przejść przez macierz systemu operacyjnego, przeglądarki i wersji przeglądarki w celu przetestowania kodu? Czy musisz wycisnąć z kodu każdą uncję szybkości?

document.ready () sprawia, że ​​wiele z tych pytań staje się nieistotnych. document.ready () został zaprojektowany, aby ułatwić Ci życie. Pojawia się przy niewielkim (i śmiem powiedzieć akceptowalnym) uderzeniu wydajnościowym.


Po prostu coś, co widziałem - jedna z Twoich zmian została odrzucona, ale dla mnie wygląda dobrze. Możesz przesłać to ponownie: stackoverflow.com/review/suggested-edits/3224385
Qantas 94 Heavy

1

Widziałem odniesienia / posty na blogu w Internecie dotyczące korzystania z jquery document.ready. Moim zdaniem zarówno używanie go, jak i umieszczanie całego javascript na dole strony są ważne. A teraz pytanie, które byłoby lepsze? To tylko kwestia stylu programowania.


0

Nie, nie jest to konieczne. Możesz umieścić tag script tuż przed tagiem zamykającym body lub, jeśli obsługujesz IE9 +, możesz użyć natywnego JS.

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.