2017-03-01 3 views
11

Il était une fois, il y avait beaucoup de débats houleux sur <script> en <head> ou <body>.Une bonne raison de ne pas utiliser <script report> AUJOURD'HUI?

Beaucoup SO postes avaient déjà souligné la meilleures pratiques/règle est de placer le <script> avant la fin de <body> pour ne pas bloquer l'analyseur html, ce qui la peinture premier écran accès plus rapide et DOM plus rapide pour le client, et donc un meilleur UX.

Ce doit être un duplicate╰ (`□ ') ╯

Attendez ... <script> peut être deferred maintenant, en fait pendant un bon moment!

messages anciens ont dit

scénario différé peut résultats JS problèmes de dépendance

Non, il ne sera pas. Il conserve l'ordre d'exécution immédiatement lorsque le DOM est analysé.

Il ne fonctionne pas les vendeurs croisés

Oui, il était une fois, mais aujourd'hui, il est presque pris en charge par tous les principaux éditeurs de navigateurs: http://caniuse.com/#search=defer, en plus peut avoir un problème avec IE < 10 comme les commentaires signaler. Cependant, les avantages qu'il offre semblent évidents, au moins pour moi, car il télécharge le script en parallèle plus tôt (avant de commencer l'analyse du DOM), donc pas besoin de demander le script plus tard et de raccourcir le temps qu'il prend pour apporter toute la page interactive.

Pour être bref, cette question est semblable à: une bonne raison de ne pas utiliser à la place

<head> 
... 
<script src='cdn/to/jquery' defer> 
<script src='cdn/to/bootstrap' defer> 
<script src='script/depends/on/jqueryandbootstrap' defer> 
</head> 

utilisant ceci:

<body> 
... 
<script src='cdn/to/jquery'> 
<script src='cdn/to/bootstrap'> 
<script src='script/depends/on/jqueryandbootstrap'> 
</body> 

Note: Cela pourrait être un sujet "ancien" avec beaucoup de discussions. Toutefois, comme la technologie Web évolue très rapidement, les fournisseurs de navigateurs s'alignent mieux et sont plus compatibles avec les nouvelles spécifications Web, de nombreuses anciennes réponses de stackoverflow peuvent ne pas être à jour.

+4

il y a une note dans caniuse que IE <10 pourrait être cassé - à mon avis, c'est une bonne raison de commencer à utiliser 'defer' maintenant: p –

+4

[Voici une bonne lecture.] (Http: //www.growingwiththeweb .com/2014/02/async-vs-defer-attributes.html) – Pointy

+0

@Pointy J'ai vu ça, c'est une bonne visualisation, en plus je pense que 'async' et' defer' devraient prendre moins de temps au total. – Xlee

Répondre

1

Oui, mais uniquement parce que vous utilisez jQuery.

jQuery doesn't work with defer car il essaie de se déclencher dès que la page devient interactive. Ils ne peuvent pas le réparer d'ici peu (j'ai soulevé ce bug il y a plus d'un an) car changer le comportement prêt à fonctionner avec defer casserait beaucoup de composants qui reposent sur le déclenchement de l'événement prêt de jQuery sur interactif (c.-à-d.).Si vous utilisez un framework plus moderne (React, Angular 2, Polymer, Vue, ou à peu près n'importe quoi d'autre) alors allez-y - ou même passez à l'étape suivante et utilisez <script type=module dans les nouveaux navigateurs et un héritage regrouper dans <script nomodule defer... pour IE.