J'ai étudié divers chargeurs de ressources asynchrones et je ne sais pas encore lequel utiliser. Là où je travaille, nous avons des efforts de groupe disparates dont les modules de classe peuvent utiliser différentes versions de jQuery (etc.). En tant que tel, les dépendances imbriquées peuvent également différer. Je n'ai aucun contrôle sur cela, donc cela signifie que je dois charger dynamiquement des ressources qui peuvent utiliser des versions alternatives de la même bibliothèque.
À ce titre, voici mes exigences:
- Chargez les fichiers de ressources JavaScript et CSS de manière asynchrone.
- Gérez l'ordre des dépendances et les dépendances imbriquées entre les versions.
- Détectez si une ressource est déjà chargée.
- Doit permettre le chargement entre domaines (CDN)
- (facultatif) Permettez-nous de décharger une ressource.
J'ai regardé:
Je pourrais peut-être simuler ces exigences moi-même en chargeant des versions dans des variables correctement nommées et en utilisant un tableau pour suivre ce qui est déjà chargé ... mais (espérons-le) quelqu'un a déjà inventé cela.
Mes questions sont donc:
- Lesquels utilisez-vous? Et pourquoi?
- Y en a-t-il d'autres qui satisfont pleinement à mes exigences?
- Avec quoi trouvez-vous le plus éloquent et le plus facile à utiliser? Et pourquoi?
MISE À JOUR:
Pour ceux qui sont intéressés, j'ai essayé toutes les bibliothèques AMD ci-dessus (et plus). Au final, je suis parti avec RequireJS . C'est juste plus propre et plus facile dans l'ensemble ... et je suis heureux de l'utiliser.
la source
getScript
fonction pour l'injection de script.Réponses:
J'ai utilisé RequireJS sur des projets sérieux, et j'adore ça, mais ce n'est pas vraiment destiné à être un chargeur asynchrone. Il s'agit vraiment d'un système de modules. Le chargement asynchrone est fourni en service dans ce but. Il peut être poussé pour répondre à toutes vos exigences, mais ses services de chargement sont conçus pour charger des modules, pas des fichiers arbitraires.
Charger les fichiers de ressources JavaScript et CSS de manière asynchrone : Requirejs charge tous les modules dont vous avez besoin à l'aide de l'injection de balises de script, donc de manière asynchrone.
Gérer l'ordre des dépendances et les dépendances imbriquées entre les versions : c'est là que RequireJS brille. Les modules peuvent déclarer des dépendances sur d'autres modules, et l'ordre de chargement sera extrapolé à partir de cette déclaration de dépendance. Il existe également un plugin de commande, qui peut forcer la commande sur les dépendances.
Détecter si une ressource est déjà chargée : Requirejs ne chargera un module qu'une seule fois.
Doit permettre le chargement entre domaines (CDN) : c'est possible, mais nécessite une configuration; Vous pouvez définir une URL spécifique pour n'importe quel module, et cela remplacera l'emplacement par défaut, vous pouvez donc le définir sur un CDN.
RequireJS servira mieux si vous écrivez des modules en utilisant son format, et sera moins efficace si vous l'utilisez pour charger du javascript brut.
Il fournit également un processus de construction qui fusionnera vos modules en un seul fichier pour la production.
la source
En théorie, vous pouvez simplement conserver une liste de scripts déjà chargés et créer une fonction qui charge des scripts qui n'ont pas encore été chargés.
http://jsfiddle.net/BDG/Dhdu7/2/
la source
Si vous regardez RequireJS et que vous souhaitez dépendre des fichiers CSS, vous pouvez consulter le plugin CSSP RequireJS :
la source