lundi 23 avril 2007

L'avancement

La version 0.1.0 n'est pas loin de sortir...

Mon problème actuel est de gérer l'insertion de javascript via
Archetype.require(module)
En effet, pour que l'application ne dépende pas trop d'Archetype (j'aimerai ne pas emprisonner le développeur dans le framework ;o) ) il faut que ce require soit synchrone, c'est à dire qu'il charge le module, et que le programme attende que le module soit chargé dans le navigateur pour pouvoir l'utiliser.

Le gros problème, c'est que le javacript, c'est mono threadé, sans l'être vraiment. Quand j'ajoute une balise script avec la source vers le fichier js, celui-ci se charge en fond. Si je fais une boucle d'attente pour verifier qu'une variable vient de dire "ok, c'est chargé", je me retrouve en fait dans une boucle infinie.

Dans le bootstrap, j'utilise des setTimeout (qui, eux, ne sont pas dans le même thread) mais ceux-ci impose de pouvoir appeler une nouvelle fonction lorsque la variable est disponible.... Ce que je ne souhaite pas imposer à l'utilisateur ...

J'ai donc essayé la requête XmlHttpRequest synchrone (qui marche plus ou moin bien lors du chargement de la page... mais surtout il semblerait, qu'apres le chargement du script, de retour dans mon code d'initialisation, les objets que je viens de charger ne sont pas disponibles dans mon thread ! :'( Pour autant c'est peut-être un problème local au chargement de la page car le chargement d'une page est ce qu'il y a de plus complexe à comprendre en javascript, je crois :D

Mon premier Archetype.require est utilisé par le Logger qui utilise la configuration pour savoir quel module de logger il doit prendre, et en déduire quel type d'objet sera le singleton Logger (je vous rassure, ils ont tous la même interface abstraite!)

Bref, j'ai pas mal de tests à faire et je vais devoir enquêter plus loin sur comment fait le require de dojo (qui a, a priori, le même but).

Edit: Après enquête , dojo charge le javascript via une XmlHttpRequest Synchrone, mais au lieu de mettre le résultat de la requête dans une balise script, le code chargé est directement interprêté!

A tester, donc :)

0 commentaires: