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.