JSDK (JavaScript Development Kit) - Update
Par Romain Ecarnot, jeudi 23 juin 2005 à 11:02 :: Etude et Recherche :: #3 :: rss
Et oui, déjà un petit update de prévu ;), et ça ne sera certainement pas le dernier.
Ce projet me permet aussi de découvrir un peu plus Javascript.
L'importation en masse des fichiers js me pausait probème, disons que je n'aimais pas le fait qu'on soit obliger de tout inclure dans la page html avant de pouvoir utiliser les différentes classes du jdsk.
Après quelques tests fructueux, je pense avoir réglé ce problème en donnant la possibilité d'importer nos classes à la volée (ala import de ActionScript)
Importer tous les fichiers js dans la page html en cours me posait plusieurs soucis :
- Longeur de la déclaration
- Poids total des fichiers chargés
- Mise à jours de classes longue et laborieuse (modification de 2 fichiers pour une classe)
Mais comment charger "dynamiquement" les fichiers js suivant leur utilisation (dépendance) ?
J'ai donc mis à profit le XmlHttpRequest pour charger les classes dont j'avais besoin, au moment où j'en ai besoin.
Fini les
1. <!-- jsdk importation -->
2. <script language="JavaScript" type="text/JavaScript" src="../jsdk/config.js"></script>
3. <script language="JavaScript" type="text/JavaScript" src="../jsdk/core.js"></script>
4. <script language="JavaScript" type="text/JavaScript" src="../jsdk/exceptions.js"></script>
5. <script language="JavaScript" type="text/JavaScript" src="../jsdk/utils.js"></script>
6. <script language="JavaScript" type="text/JavaScript" src="../jsdk/events.js"></script>
7. <script language="JavaScript" type="text/JavaScript" src="../jsdk/commands.js"></script>
8. <script language="JavaScript" type="text/JavaScript" src="../jsdk/structures.js"></script>
9. <!-- End importation -->
Il est maintenant possible d'importer à la volée les classes que l'on a besoin dans le code en cours. Pour reprendre l'exemple de la collaboration Flash / Javascript, le code se presente maintenant de cette façon :
1. <html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
2. <head>
3.
4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5. <title>Untitled Document</title>
6.
7. <!-- JSDK Core Importation -->
8. <script language="JavaScript" type="text/JavaScript" src="jsdk/Core.js"></script>
9.
10. <!-- Macromedia Kit Importation -->
11. <script language="JavaScript" type="text/JavaScript" src="jsdk/macromedia/JavaScriptFlashGateway.js"></script>
12.
13. <!-- Importation -->
14. <script language="javascript" type="text/javascript">
15. Core.importClass('jsdk.io.FlashObject');
16. Core.importClass('jsdk.events.EventBroadcaster');
17. </script>
18.
19. </head>
20.
21. <body>
22. <script language="JavaScript" type="text/JavaScript">
23. function runTest()
24. {
25. oD.broadcastEvent( new FlashEvent("myFunction", this, "myRomain", 123) );
26. }
27.
28. var f = new FlashObject('client.swf', 300, 60);
29. var f2 = new FlashObject('client.swf', 300, 60);
30.
31. //f.connect(); //use default proxy location
32. f.write(document);
33. f2.write(document);
34.
35. var oD = new EventBroadcaster();
36. oD.addEventListener("myFunction", f);
37. oD.addEventListener("myFunction", f2);
38.
39. </script>
40.
41. <input type="button" value="Dispatch simple event" onclick="runTest()" />
42. </body>
43. </html>
44.
Il est biensur possible d'importer un package eniter :
Core.importClass('jsdk.events.*');
Outre le fait que le code html est plus simple à écrire, il y a quelques points que je trouve intéressants avec cette technique :
- Plus besoin de savoir si tel ou tel fichier est bien chargé avant d'utiliser une classe spécifique (dépendance réglée à l'intérieur de chaque classe)
- On importe vraiment ce qu'on a besoin et non plus tout le framework
- Plus besoin de mettre à jours plusieurs fichiers pour une même classe (les fichiers ne sont pas regroupés dans un fichier unique comme auparavant mais reste sous forme de package (répertoire))
- On colle un peu plus au développement que l'on connait bien (ActionScript) avec sa règle des "import".
Une mécanisme est bien entendu mis en place pour éviter les dépendance croisée, question de ne pas charger certains fichiers en boucle ;).
Il me reste encore quelques tests à effectuer la dessus, et je proposerai un update de jsdk avec cette nouvelle ligne de développement.

Commentaires
1. Le mercredi 30 novembre 2005 à 16:59, par Madk
2. Le mercredi 30 novembre 2005 à 23:30, par Romain
Ajouter un commentaire