$(document).ready (function () {}); vs script au bas de la page

Quelle est la différence / avantage / inconvénient d'écrire un script en bas de la page et d'écrire le script dans

$(document).ready(function(){});
92
demandé sur Sourav 2011-05-17 09:36:05

2 réponses

Très peu en soi, de toute façon le DOM sera prêt pour que vous puissiez opérer (j'étais nerveux à ce sujet jusqu'à ce que je lise ceci de Google). Si vous utilisez le truc de fin de page, votre code peut être appelé le plus petit, le plus petit peu plus tôt, mais rien qui importera. Mais plus important encore, ce choix concerne l'endroit où vous liez votre JavaScript dans la page.

Si vous incluez votre script dans la balise head et de s'appuyer sur ready, le navigateur détecte votre script balise avant qu'il affiche quoi que ce soit à l'utilisateur. Dans le cours normal des événements, le navigateur s'arrête brutalement et télécharge votre script, déclenche L'interpréteur JavaScript et lui remet le script, puis attend que l'interpréteur traite le script (puis jQuery regarde de diverses manières pour que le DOM soit prêt). (Je dis "dans le cours normal des choses" parce que certains navigateurs prennent en charge le async ou defer attributs sur les balises script.)

Si vous incluez votre script balise à la fin de l'élément body, le navigateur ne fait pas tout cela tant que votre page n'est pas déjà largement affichée à l'utilisateur. Cela améliore le temps de chargement perçu pour votre page.

Donc, pour obtenir le meilleur temps de chargement perçu, placez votre script en bas de la page. (C'est aussi la ligne directrice des gens de Yahoo.) Et si vous allez le faire, alors il n'y a pas besoin d'utiliser ready, bien que bien sûr vous pourriez Si vous avez aimé.

Il y a un prix pour cela, cependant: Vous devez être sûr que les choses que l'utilisateur peut voir sont prêts à être interagi avec. En déplaçant le temps de téléchargement après que la page est largement affichée, vous augmentez la possibilité pour l'utilisateur de commencer à interagir avec la page avant le chargement de votre script. C'est l'un des contre-arguments pour mettre la balise script à la fin. Souvent, il n'est pas un problème, mais vous devez regarder votre page pour voir si il est et, si oui, comment vous voulez traiter avec elle. (Vous pouvez mettre un petit inline script élément dans le head qui configure un gestionnaire d'événements à l'échelle du document pour faire face à cela. De cette façon, vous obtenez le temps de chargement amélioré mais si ils essaient de faire quelque chose trop tôt, vous pouvez soit leur dire cela ou, mieux, mettre en file d'attente la chose qu'ils voulaient faire et le faire lorsque votre script complet est prêt.)

141
répondu T.J. Crowder 2015-05-28 06:56:33

Votre page se chargera plus lentement en dispersant les scripts $(document).ready() dans tout le DOM (au lieu de tous à la fin) car il faut que jQuery soit synchrone chargé en premier.

$ = jQuery. Vous ne pouvez donc pas utiliser $ dans vos scripts sans d'abord charger jQuery. Cette approche vous oblige à charger jQuery près du début de la page, ce qui arrêtera le chargement de votre page jusqu'à ce que jQuery soit complètement téléchargé.

Vous ne pouvez pas async charger jQuery non plus car dans de nombreux cas, votre $(document).ready() script(s) va essayer de s'exécuter avant que jQuery soit entièrement chargé asynchrone et provoque une erreur, car encore une fois, $ n'est pas encore défini.

Cela étant dit, il y a un moyen de tromper le système. Définir essentiellement $ égal à une fonction qui pousse les fonctions $(document).ready() dans une file d'attente/tableau. Ensuite, au bas de la page, chargez jQuery, puis parcourez la file d'attente et exécutez chaque $(document).ready() un à la fois. Cela vous permet de reporter jQuery au bas de la page mais toujours utiliser $ au-dessus dans le DOM. Personnellement, je n'ai pas testé à quel point cela fonctionne, mais la théorie est solide. L'idée a été autour pendant un certain temps, mais je l'ai très, très rarement vu mis en œuvre. Mais cela semble être une bonne idée:

Http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax

3
répondu Jake Wilson 2015-10-22 21:59:09