4 votes

Pourquoi javascript n'a-t-il pas une meilleure façon d'inclure des fichiers ?

J'ai vu quelques façons de faire en sorte qu'un fichier javascript inclue d'autres fichiers javascript, mais elles semblent toutes assez compliquées - la plupart du temps, elles impliquent de placer le fichier javascript à la fin du document actuel et de le charger d'une manière ou d'une autre.

Pourquoi javascript n'inclut-il pas une simple directive include "charger ce fichier et exécuter le script qu'il contient" ? Ce n'est pas comme si c'était un nouveau concept. Je sais que tout le monde est excité à l'idée de tout faire en HTML5 avec javascript etc, mais est-ce que ça ne va pas être difficile si vous devez pirater l'omission d'une fonctionnalité de base comme celle-ci ?

Je ne vois pas comment cela pourrait poser un problème de sécurité, puisqu'une page web peut inclure autant de fichiers javascript qu'elle le souhaite, et qu'ils sont tous exécutés de toute façon.

3voto

bdonlan Points 90068

Les principaux problèmes du système d'inclusion actuel (c'est-à-dire l'ajout de balises supplémentaires script) concernent la latence. Puisqu'une balise script peut insérer du code au point d'inclusion, dès qu'une balise script est rencontrée, la suite de l'analyse doit plus ou moins s'arrêter jusqu'à ce que le JS se télécharge et soit exécuté (bien que le navigateur puisse continuer à récupérer des ressources en parallèle). Si le JS décide d'exécuter une inclusion, vous venez d'ajouter une latence supplémentaire à cela - maintenant vous ne pouvez même pas récupérer vos script en parallèle.

En fait, il s'agit de résoudre un problème qui n'existe pas (puisque JS peut déjà ajouter des balises script supplémentaires pour effectuer une inclusion), tout en aggravant le problème de latence. Il existe des mineurs de javascript qui peuvent fusionner les fichiers JS ; vous devriez envisager de les utiliser à la place, car ils contribueront également à améliorer les problèmes de latence.

2voto

Milimetric Points 7539

En fait, YUI 3 résout ce problème à merveille. N'hésitez pas à consulter la documentation : http://developer.yahoo.com/yui/3/yui/#use (c'est la fonction spécifique de Use qui fait cette magie). En gros, cela fonctionne comme suit :

  • Vous définissez les modules
  • Lorsque vous créez l'objet YUI de base avec YUI(), vous spécifiez les modules dont votre code a besoin.
  • Dans les coulisses, YUI vérifie si ces modules sont chargés. Si ce n'est pas le cas, il les charge de manière asynchrone sur la page.

J'ai également lu que l'équipe de jQuery travaille sur quelque chose de similaire (quelqu'un me soutient ici).

Quant à l'argument philosophique selon lequel ce serait bien si cela était intégré, je pense que cela pourrait être une bonne fonctionnalité. D'un autre côté, la simplicité de javascript est également intéressante. Il permet un point d'entrée beaucoup plus bas pour les programmeurs débutants pour faire leur truc. Et pour ceux d'entre nous qui en ont besoin, d'excellentes bibliothèques comme YUI s'améliorent chaque jour.

0voto

knb Points 2521

Le projet requirejs tente de résoudre ce problème, voir par exemple

http://requirejs.org/docs/why.html

(Je ne l'utilise pas encore, cependant)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X