Est-ce que $ (document) .ready est nécessaire?

111

J'ai vu cette question dans stackoverflow mais je ne pense pas qu'elle ait été répondue du tout.

Est $(document).readynécessaire?

Je lie tous mes javascripts au bas de la page, donc en théorie, ils fonctionnent tous une fois que le document est prêt de toute façon.

Joshua Robison
la source
3
Les navigateurs plus anciens peuvent ne pas profiter du téléchargement parallèle que les nouveaux navigateurs utilisent. C'est la raison principale pour laquelle vos scripts sont placés en bas. Il permet spécifiquement à votre HTML et CSS d'être rendu en premier sur les anciens navigateurs. À ce stade, vous avez un choix à faire sur la façon dont vous voulez accomplir la détection que le DOM est chargé. Deux méthodes populaires pour lancer votre js sont window.onload & $ (document) .ready (en conjonction avec jQuery). Il existe d'autres options et des inconvénients évidents et faciles à rechercher pour window.onload. Le point est $ (document) .ready fonctionne le plus souvent et est facile à utiliser.
BradChesney79

Réponses:

125

Est $(document).readynécessaire?

non

si vous avez placé tous vos scripts juste avant la </body>balise de fermeture, vous avez fait exactement la même chose.

De plus, si le script n'a pas besoin d'accéder au DOM, peu importe où il est chargé au-delà des dépendances possibles sur d'autres scripts.

Pour de nombreux CMS, vous n'avez pas beaucoup de choix quant à l'emplacement de chargement des scripts, c'est donc une bonne forme pour le code modulaire d'utiliser l' document.readyévénement. Voulez-vous vraiment revenir en arrière et déboguer l'ancien code si vous le réutilisez ailleurs?

hors sujet:

En remarque: vous devez utiliser jQuery(function($){...});au lieu de $(document).ready(function(){...});car cela force l'alias à $.

zzzzBov
la source
Etes-vous sûr que c'est "exactement la même chose"? J'avais l'impression que votre css (ou tout autre code chargé en parallèle avec le html principal) n'était peut-être pas encore entièrement analysé.
Zach Lysobey
6
@ZachL, le document peut être prêt avant que CSS ne soit complètement analysé. document.ready n'est pas le même que l' onloadévénement, où les images et autres ressources externes ont fini de se charger.
zzzzBov
Merci pour la clarification.
Zach Lysobey
5
Ce "non" m'a juste coûté 3 heures de travail ... assurez-vous de ne pas vous tromper </body> avec <body> :)
teejay
1
Cependant, je ne suis pas nécessairement d'accord pour forcer l'alias, surtout s'il noConflict()doit être utilisé pour une raison quelconque.
Jay Blanchard
22

Non, si votre javascript est la dernière chose avant la fermeture, vous n'aurez pas besoin d'ajouter ces balises.

En remarque, un raccourci pour $ (document) .ready est le code ci-dessous.

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

Cette question pourrait être bonne. Est-ce que vous l'avez vu? jQuery: Pourquoi utiliser document.ready si JS externe en bas de page?

tortue
la source
6
La question est essentiellement "Ai-je vraiment besoin d'un document prêt lorsque je place mes scripts en bas du corps?", Et non "Y a-t-il un raccourci pour écrire $(document).ready()".
nnnnnn
4

Non, ce n'est pas nécessaire à condition que vous sachiez qu'il n'y a pas de choses différées - et dans la plupart des cas, vous saurez si vous avez développé ce sur quoi vous travaillez de haut en bas.

- C'est lorsque vous introduisez le code de quelqu'un d'autre, sans l'avoir complètement audité, que vous ne savez pas.

Alors, demandez-vous si vous utilisez un framework ou un éditeur qui vous aide avec la structure? Apportez-vous le code de quelqu'un d'autre et vous n'avez pas pris la peine de lire chaque fichier? Êtes-vous prêt à passer par la matrice du système d'exploitation, du navigateur et de la version du navigateur pour tester votre code? Avez-vous besoin de tirer chaque once de vitesse de votre code?

document.ready () rend la plupart de ces questions hors de propos. document.ready () a été conçu pour vous faciliter la vie. Il vient à un petit (et j'ose dire acceptable) de performance.

BradChesney79
la source
Juste quelque chose que j'ai vu - une de vos modifications a été rejetée, mais cela me semble correct. Vous voudrez peut-être soumettre à nouveau celui-ci: stackoverflow.com/review/suggested-edits/3224385
Qantas 94 Heavy
1

J'ai vu des références / articles de blog sur Internet concernant l'utilisation de jquery document.ready. À mon avis, l'utiliser ou mettre tous vos javascript en bas de page sont tous deux valides. Et maintenant la question serait de savoir lequel serait le meilleur? C'est juste une question de style de programmation.

Krishna Chytanya
la source
0

Non, ce n'est pas nécessaire. Vous pouvez placer la balise de script juste avant la balise de fermeture du corps ou, si vous supportez IE9 +, vous pouvez utiliser le JS natif.

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

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
mbokil
la source