Loader de méthodes/classes Javascript

Loader de méthodes/classes Javascript - HTML/CSS - Programmation

Marsh Posté le 24-05-2007 à 19:57:03    

Bonjour à tous,
 
Je suis en ce moment dans une boite qui utilises pour un portail essentiellement du javascript. Pour des problèmes de performance, et à cause de l'utilisation de plusieurs frames, ils doivent charger toutes les classes javascript utilisées dès l'ouverture du portail (cela prend déjà environ 20secondes).  
 
Comme vous l'avez compris, niveau perf, c'est pas terrible, surtout que dans les classes, toutes les méthodes ne sont pas forcément utilisées. J'aimerais donc savoir s'il y a moyen d'accelerer le processus (par exemple ne charger que les méthodes utilisées), avec bien sur un souci de ne pas multiplier les classes (car certaines méthodes sont génériques à plusieurs portails).  
 
 
Si vous avez des idées, je suis preneur :jap:

Reply

Marsh Posté le 24-05-2007 à 19:57:03   

Reply

Marsh Posté le 24-05-2007 à 23:19:46    

url ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 25-05-2007 à 03:48:01    

Ca m'a lair un peu con comme process. C'est l'interêt des lib modulables. Tu vas pas par exemple t'amuser à charger scriptculous en entier quand tu te sert juste de deux pauvres effets.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 25-05-2007 à 09:31:41    

la seule façon de "loader dynamiquement" du js dans un page c'est:

Code :
  1. document.write("<script type='text/javascript' src='pouet.js'></script>" );
 

shinuza> c'est pas "forcément" con... Admettons que sur la page d'accueil il y ait 2 effets qui servent 95% du temps, et 30 autres qui servent 5% du temps. ça sert à rien de loader tout ça à chaque fois [:spamafote]

Message cité 1 fois
Message édité par anapajari le 25-05-2007 à 09:31:52
Reply

Marsh Posté le 25-05-2007 à 14:03:42    

Oui, c'est ce que je disais :)


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 25-05-2007 à 14:12:37    

aaaaah j'avais mal compris sorry [:jap]

Reply

Marsh Posté le 25-05-2007 à 19:38:58    


 
Pas d'url, ce sont les portails d'une entreprise ;)
 
Et s'ils sont chargés tous au début, c'est effectivement pour ne pas charger les scripts js à longueur de journée, dès qu'on ouvre les même pages.  
 
 
 
Shinuza >> lorsque tu parles de lib modulables, c'est quoi exactement ? Car en fait, ce que je voudrais trouver, c'est de faire une opération pour ne charger que les méthodes utilisées, et non toutes les méthodes d'une classe. Ou alors, pouvoir charger tous les scripts mais beaucoup plus rapidement. Car la c'est très long au début.

Reply

Marsh Posté le 25-05-2007 à 19:46:43    

tant pis [:jagstang]

 

edit : 20 secondes j'aimerais bien voir ça


Message édité par jagstang le 25-05-2007 à 19:47:00

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 25-05-2007 à 20:06:32    

anapajari a écrit :

la seule façon de "loader dynamiquement" du js dans un page c'est:

Code :
  1. document.write("<script type='text/javascript' src='pouet.js'></script>" );




 
Euh... non, pas vraiment :sweat:

Reply

Marsh Posté le 25-05-2007 à 20:29:19    

4bis a écrit :

Pas d'url, ce sont les portails d'une entreprise ;)
 
Et s'ils sont chargés tous au début, c'est effectivement pour ne pas charger les scripts js à longueur de journée, dès qu'on ouvre les même pages.  
 
 
 
Shinuza >> lorsque tu parles de lib modulables, c'est quoi exactement ? Car en fait, ce que je voudrais trouver, c'est de faire une opération pour ne charger que les méthodes utilisées, et non toutes les méthodes d'une classe. Ou alors, pouvoir charger tous les scripts mais beaucoup plus rapidement. Car la c'est très long au début.


 
Perso j'utilise un truc comme ça :
 

Code :
  1. Element.Utils = {
  2.   hide : function(){
  3.    this.setStyle('display','none');
  4.   },
  5.   show : function(){
  6.    this.setStyle('display','');
  7.   },
  8.   toggle : function() {
  9.    this.style.display = (this.getStyle('display') != 'none') ? this.setStyle('display','none') : this.setStyle('display','');
  10.   }
  11.  }
  12.  Object.extend(Montruc,Element.Utils);


 
Du coup je peux regrouper toutes mes méthodes privées dans des objets, et j'étant un gros objets à la volée, le but étant de regrouper les méthodes similaires dans un seul objet avec un nom explicite. Du coup je sais ce qui va me servrir et ce qui sera inutile, je peux choisir les méthodes/fichiers que je veux inclure, donc je vais pas accrocher des méthodes inutile sur mon objet.
 
Autrement à part des fichiers séparés je vois pas comment tu peux cibler des méthodes.
 

gizmo a écrit :

Euh... non, pas vraiment :sweat:


 
J'aimerais bien voir un contre exemple [:moule_bite]
 


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 25-05-2007 à 20:29:19   

Reply

Marsh Posté le 25-05-2007 à 21:45:21    

Tu appeles ton JS via XHR et tu fais un eval dessus.

Reply

Marsh Posté le 25-05-2007 à 22:12:30    

gizmo a écrit :

Tu appeles ton JS via XHR et tu fais un eval dessus.


http://www.acc.umu.se/~zqad/cats/1166518423-PXQMK3AWZUFPVQIVPG7HORSMICMGISVZ.jpg

 

Je vais juste te permettre de te culturer un peu, eval accède directement à l'interpreteur, y'a rien de plus mauvais dans un soft.
Donc tes techniques moisies, tu te les garde merci.


Message édité par Shinuza le 25-05-2007 à 22:13:43

---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 25-05-2007 à 22:20:51    

Est-ce que le fait que le JS venait du même site et fonctionnait avant d'avoir été séparé pour diminuer le chargement de la page t'es venu à l'idée avant de poster ta connerie ou pas?
 
Je sais très bien que le eval est a utiliser avec beacoup de parcimonie, mais dans ce cas-ci, c'est justement l'une des rares utilisation qui en vaut la peine, avec le JSON (une fois les evenutelles fonctions retirée au besoin)

Reply

Marsh Posté le 25-05-2007 à 22:34:41    

Et ca change quoi au fait que "eval is evil"? Cites moi un seul language ou eval n'est pas déprécié? [:doc petrus]
La technique d'anaj est très correcte et permet de faire la même chose sans eval et sans XHR, donc la connerie émane plutot de ton post [:moule_bite]

Message cité 1 fois
Message édité par Shinuza le 25-05-2007 à 22:35:41

---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 25-05-2007 à 22:42:51    

Shinuza a écrit :

Et ca change quoi au fait que "eval is evil"?


C'est bien, t'as bien appris ton catéchisme. Maintenant tu allumes ton cerveau et tu relis ce que j'ai écrit.

Shinuza a écrit :

Cites moi un seul language ou eval n'est pas déprécié? [:doc petrus]


Perl? (c'est le premier qui m'est venu à l'esprit :o ) Et il y en a d'autre. C'est pas parce qu'une fonction permet tous les excès qu'il ne faut pas l'utiliser si c'est en connaissance de cause et dans un cadre bie défini.

Shinuza a écrit :

La technique d'anaj est très correcte et permet de faire la même chose sans eval et sans XHR, donc la connerie émane plutot de ton post [:moule_bite]


C'est sur que le document.write est applaudi par tous les gens qui prèche le "eval is evil" [:mlc]

Message cité 1 fois
Message édité par gizmo le 25-05-2007 à 22:43:16
Reply

Marsh Posté le 25-05-2007 à 23:18:17    

gizmo a écrit :

Perl? (c'est le premier qui m'est venu à l'esprit :o ) Et il y en a d'autre. C'est pas parce qu'une fonction permet tous les excès qu'il ne faut pas l'utiliser si c'est en connaissance de cause et dans un cadre bie défini.


La fonction eval en perl est directement assimilée au language, elle sert même pour gérer les exceptions  [:sinclaire]  

gizmo a écrit :

C'est sur que le document.write est applaudi par tous les gens qui prèche le "eval is evil" [:mlc]


Document write écrit dans le node parent de l'élement appelant. Big deal.
Je connais pas beaucoup de lib qui utilise ta "technique" pour moduler  [:pingouino]  


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 25-05-2007 à 23:24:43    

Bon, puisque visiblement ca fait pas tilt dans le grand espace vide qui te sert de boite cranienne, on va essayer autrement...
 
Tu fais ton document.write(), et en backend, il se passe quoi de plus qu'un chargement plus eval? RIEN, NIXT, NADA, QUEDAL!!! T'as pas un poil de pet de vérification en plus, par contre comme side effect, tu modifies ton DOM.
 
A côté, avec ma technique, je peux:
* Executer un effet visuel en attendant que le téléchargement/évaluation soit terminé. Pour le ressenti de l'utilisateur c'est important
* Vérifier que le serveur ne m'a pas envoyer chier, et le cas échant, choisir de désactiver les fonctions dépendantes du module, prévenir l'utilisateur, voire retenter le chargement ultérieurment
 
 
Et pour conclure, une des extensions de jQuery permet de faire cela.


Message édité par gizmo le 25-05-2007 à 23:24:58
Reply

Marsh Posté le 25-05-2007 à 23:54:15    

-Ton premier point est accessible quelque soit la technique employée.
-Pareil pour le deuxième point et la desactivation des fonctions associées, aussi, j'aime bien ta conception du web, c'est genre la loterie pour accèder à un fichier [:petrus dei]

 

Sinon, je pense que ana parlais de technique "propre", lorsqu'il à dit "la seule"


Message édité par Shinuza le 25-05-2007 à 23:54:42

---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 26-05-2007 à 00:00:49    

Bon laisse tomber, t'as raison, le web, c'est super, y a jamais de hit miss, y a jamais de serveur surchargé, etc... Et c'est tellement plus pratique de faire un document.write et puis de devoir jouer a coup de timeout parce que le telechargement est fait dans un autre thread. [:kiki]

Reply

Marsh Posté le 26-05-2007 à 00:07:47    

Exactement la technique à laquelle je pensais [:bien] [:moule_bite]


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 26-05-2007 à 00:19:17    

J'oubliais, on utilise juste document.write() car safari 2.0 se pète la gueule si on passe par le dom pour inserer un script.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed