Le modèle du require a pas mal évolué depuis quelques temps, je vais détailler son architecture actuelle.
Tout d'abord, pour améliorer la gestion des XHR il a fallu faire une gestion construite de ceux qui avaient déjà été réalisés et de ceux qui ne l'avaient pas été.
Pour cela nous avons créé notre propre système de notation permettant de façon unique d'identifier un fichier sur le serveur et de quel type il est afin de savoir comment l'interpréter une fois chargé.
Cela a peut être l'air simpliste, mais quelque soit la notation de l'utilisateur du framework, identifier de façon unique chaque fichier s'est avéré un vrai besoin.
Le Require est devenu maintenant seulement la première étape et la porte d'entrée du système. Son rôle est d'identifier chaque fichier et de vérifier s'il n'a pas été déjà chargé. Il envoie ensuite la requête au loader.
Le cas des requires synchrones est particulier, il les gérera alors sans le loader.
Le loader représente la réelle nouveauté du système. Il s'agit d'une fonction sur laquelle rebouclent tous les XHR asynchrones. On peut utiliser la fonction de deux façons : soit pour ajouter des XHR (depuis le require) soit pour en signaler des réalisés (en callback des XHR).
Ainsi le loader gère une file d'attente de tous les XHR, il également à même de déclencher les callbacks dans le cas des requires multiples.
Avec ce système, tous les XHR rebouclent au même endroit et la gestion est centralisée. Cela permet notamment la possibilité de gérer des priorités au niveau des chargements ainsi que de laisser des "slots" d'XHR pour la partie métier de l'application.
Le lancement lui-même des XHR représente la dernière partie du système. Elle n'a par contre pas énormément évolué.
Nous avons malheureusement découvert un bug dans le système. L'imbrication d'une requête asynchrone et d'une synchrone nous a donné des résultats hautement improbables sur FF sans que nous ne puissions comprendre ce qu'il se passait. J'en arrive malheureusement à la conclusion que nous n'y pouvons rien.
Mon coté extrémiste dira même que la requête synchrone devrait être abandonnée totalement mais j'avoue qu'elle semblait bien intéressante pour s'assurer de la présence d'une librairie avant un code.