2010-11-03 11 views
0

J'ai une page html avec 2 boutons et une grande fonction javascript qui est exécutée toutes les 10 ms. Chaque clic sur chaque bouton exécute une fonction javascript qui modifie certaines variables utilisées par la grande fonction javascript et modifie son comportement. Avec le temps, le code devenait très complexe et prenait beaucoup de temps et je voudrais déplacer tout le calcul des variables vers le serveur. Ou, mieux encore, je voudrais générer toute la fonction sur le serveur.Comment puis-je modifier dynamiquement un JS appelé depuis un client?

Comment puis-je modifier dynamiquement la grande fonction javascript lorsque l'un des deux boutons est enfoncé?

+0

Quel script server utilisez-vous (ou comment l'appelez-vous)? Comment la fonction est-elle attachée au bouton (à l'aide du DOM hérité ou du modèle d'événement DOM?) – Lekensteyn

+2

Votre question est trop vague pour être responsable en ce moment. –

Répondre

0

Ce que vous pourriez faire est qu'une fois que le bouton est pressé vous faites une demande d'Ajax au côté de serveur. Là, vous générez le code javascript basé sur le bouton pressé et renvoyez-le. Vous pouvez ensuite évaluer la réponse et exécuter la fonction appropriée.

0

La saisie d'un script volumineux et son exécution toutes les 10 ms sont forcément lentes.

La modification d'un script volumineux n'est pas si grave et vous ne vous souciez que du plan d'exécution du script. (Peu importe la vitesse à laquelle le serveur peut générer le script que le client va exécuter si vous l'envoyez toutes les 10 ms et c'est très compliqué, l'exécution du client va faire glisser le client s'il n'est pas correctement fait.)

Cependant, avez-vous envisagé de "réparer" votre script afin qu'il soit un peu plus compartimenté. Sûrement l'intégralité de la fonction ne change pas toutes les 10 ms? (Sur votre site, passe-t-il d'un jeu de Pong à un graphique radar en boucle toutes les 10 ms?)

exemple javascript compartimenté (en utilisant jquery): suppose que vous avez deux tags un avec la classe buttonA et un avec le bouton de classeB. En cliquant sur le bouton A ou le bouton B, vous modifiez les valeurs internes, puis le script est exécuté.

var complicatedFunction = function(){ 
    //private variables and methods 
    var a = 2, b = 3; 

    //public variables and methods 
    return { 
     exec: function(el){ 
      //which button was pushed? 
      if($(el).is('.buttonA')){ 
       a = 4; 
       b = 8; 
      } else { 
       a = 10; 
       b = 2; 
      } 
      alert('The result of a*b is ' +(a*b)); 
     } 
    } 
}(); 
$('.buttonA, .buttonB').click(function(){complicatedFunction.exec(this)}); 

Je souhaite que je pourrais aider plus, si vous postez un exemple de code peut-être que nous pouvons!