Как я могу динамически изменить JS, вызываемый с клиента? - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть html-страница с двумя кнопками и большой функцией JavaScript, которая выполняется каждые 10 мс. Каждый щелчок по каждой кнопке выполняет функцию javascript, которая изменяет некоторые переменные, используемые большой функцией javascript, и меняет ее поведение. Со временем код стал очень сложным и занимал много времени, и я хотел бы перенести весь расчет переменных на серверную часть. Или, еще лучше, я хотел бы создать всю функцию на сервере.

Как я могу динамически изменить функцию большого javascript при нажатии любой из 2 кнопок?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2010

Получение большого скрипта и его выполнение каждые 10 мс неизбежно будет медленным.

Изменение большого скрипта не так уж и плохо, и тогда вам важен только план выполнения скрипта. (Не имеет значения, насколько быстро сервер может сгенерировать сценарий, который будет выполнять клиент, если вы отправляете его каждые 10 мс, и это очень сложно. Выполнение клиента приведет к ползучести клиента, если он не выполнен должным образом.)

Однако вы уже подумали о том, чтобы просто «исправить» свой сценарий, чтобы он был немного более разделенным. Конечно, вся функция не меняется каждые 10 мс? (На вашем сайте это меняется от того, чтобы быть игрой в понг с циклическим графиком метеорологических радаров каждые 10 мс?)

Пример компилятивного JavaScript (с использованием jquery): Предполагается, что у вас есть два тега, один с классом buttonA и один с классом buttonB. Нажатие кнопки A или кнопки B изменяет внутренние значения, а затем выполняется сценарий.

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)});

Хотел бы я помочь больше, если вы опубликуете пример кода, может быть, мы сможем!

0 голосов
/ 03 ноября 2010

Что вы можете сделать, это когда вы нажмете кнопку, и отправите Ajax-запрос на сервер.Там вы генерируете код javascript на основе нажатой кнопки и отправляете его обратно.Затем вы можете оценить ответ и выполнить соответствующую функцию.

...