9
votes

Chargement de jQuery avec ExigenceJS - qui est meilleur, une version locale ou un CDN?

édité pour clarifier:

en termes de performances (bien que cela reste un terme sauvage, je sais), ce qui est mieux - charger une version locale, ou une version CDN de JQuery, over Exigusjs?

Pour l'enregistrement, Exigentjs Online Doc contient un passage qui semble décourager CDN en utilisant, bien que je ne suis pas vraiment sûr à 100% de ce que cela signifie:

Ne mélange pas le chargement CDN avec une configuration de shim dans une construction. Exemple de scénario: vous chargez jQuery à partir du CDN mais utilisez la configuration Shim pour charger quelque chose Comme la version de la backbone qui dépend de JQuery. Quand tu fais la construction, assurez-vous d'entrer en ligne JQuery dans le fichier construit et ne charge pas de la CDN. Sinon, la colonne vertébrale sera inline dans le fichier construit Et il s'exécutera avant que la jQuery chargée du CDN ne se charge. C'est parce que la configuration du shim retarde le chargement des fichiers jusqu'à ce que Les dépendances sont chargées, mais ne font pas d'emballage automatique de définir. Après une construction, les dépendances sont déjà inlinées, la configuration de la cale ne peut pas retarder l'exécution du code non défini () »jusqu'à la fois. Définir () les modules D fonctionnent avec le code chargé CDN après une construction car ils enveloppent correctement leur source de définir la fonction d'usine qui sera ne pas exécuter que tant que les dépendances sont chargées. Donc, la leçon: shim config est une mesure d'arrêt de l'écart pour le code non modulaire, le code hérité. Définir () les modules D sont meilleurs.

Téliquement, l'utilisation d'un fichier CDN JQuery aboutirait à une autre requête HTTP (ne peut pas être fusionnée avec d'autres fichiers JS à l'aide de R.JS), mais le potentiel de vos visiteurs peut avoir déjà mis en cache la version CDN d'autres sites qu'ils ont visités.

Cependant, si je l'ai dû à partir de l'information googled, vous Toujours doit offrir une copie de jQuery locale à R.js, car le fichier JS minifiée résultant serait Il faut encore contenir une copie du module JQuery pour assurer la cohérence de la dépendance. Cela entraînerait la chargement de JQuery sur la section locale et CDN. (J'espère avoir cette partie droite?)

Alors, de quelle manière c'est mieux?


0 commentaires

3 Réponses :


4
votes

Ce n'est pas seulement le fait que les gens ont mis en cache le fichier. Les agents utilisateur ne peuvent charger que quelques fichiers du même domaine en même temps. Donc, charger le fichier JS à partir d'un CDN s'assure que le fichier sera chargé simultané.

Cela vient à côté de son bénifieur d'utilisateurs ayant déjà une version mise en cache du fichier. Donc, pour les fichiers populaires (par exemple, JQuery Javascript), je le charrais toujours à partir d'un CDN.

Vous pouvez toujours ajouter une relevette à une version locale au cas où le CDN est en panne pour une raison quelconque.

note

Bien que le RFC indique que les agents d'utilisateur devraient effectuer un nombre maximal de 2 demandes simultanées, la plupart des utilisateurs ignorent cette spécification de nos jours. Voir aussi Cette ancienne (2009) Question sur SO. Notez que cela ne me surprendrait pas que les agents d'utilisateur font actuellement plus de demandes.


1 commentaires

Prenez-vous en considération que s'il charge la copie locale, il va être concaténé dans un fichier Signle JS? Donc, en chargement de la version CDN, vous ajoutez la surcharge d'une demande supplémentaire à un autre domaine ...



6
votes

réponse courte: évitez la requête HTTP supplémentaire et la recherche DNS

Vous ferez probablement mieux d'utiliser votre propre copie et de laisser les exigerjs fusionner les fichiers. En d'autres termes, je dirais qu'il est plus utile d'éviter cette demande HTTP supplémentaire et de la recherche DNS.

S'il est vrai qu'un utilisateur peut a déjà ce fichier dans leur cache d'un autre site, ils ne le feront probablement pas. Même s'ils avaient été récemment sur un autre site, les tailles de cache sont généralement suffisamment petites qu'au cours d'une session de navigation normale ou deux, un utilisateur peut facilement remplir leur cache, auquel cas des fichiers plus anciens seront jetés.

Je pense que vous parleriez seulement de 1% de votre trafic, au plus, qui dispose déjà d'un fichier CDN dans le cache, alors seulement 1% de vos utilisateurs bénéficient. Cependant, en combinant ces ressources et en évitant la demande HTTP supplémentaire, vous bénéficiez à 99% de vos utilisateurs. Donc, inversement, vous feriez mal à 99% de vos utilisateurs en vous combinant. Juste une autre façon de regarder cela.

Une autre considération est une autre considération des utilisateurs mobiles ... Les utilisateurs mobiles ont une terrible latence de sorte que le RTT pour la demande HTTP supplémentaire et la recherche DNS ont un coût plus important.


0 commentaires

6
votes

Votre devis Doc requisjs est spécifiquement sur l'utilisation de scripts qui ont une configuration de shim pour JQuery. Le chargement dynamique d'une dépendance de base à partir d'une CDN tiers est bien si tous les scripts sont des modules AMD.

Les coups de cache ne sont pas élevés, car vous pourriez penser (Yahoo, je crois que l'état de cache vs non cache), et cela signifie maintenant que vous devez maintenant compter sur un autre domaine pour le chargement.

Les avantages dépendent probablement de l'application, le profilage qui conduira à la meilleure réponse. Par exemple, s'il s'agit d'un site avec beaucoup d'images, la stratégie pour JQuery compte moins que le chargement de l'image constituera probablement le problème de perf indiscitable.

Je démarrerais avec optimisation de JQuery dans le fichier construit et à l'aide de modules AMD pour tout, donc si je veux déléguer au CDN, je peux. Toutefois, si vous utilisez ExigenceJs et la configuration Shim, les dépendances de base doivent être inlinées dans le fichier construit car les bibliothèques shimmed n'appellent pas de définition () - elles n'attendent pas que les dépendances se chargent, elles le souhaitent immédiatement.


0 commentaires