Различается ли потоковое поведение eval () в разных браузерах? - PullRequest
0 голосов
/ 20 января 2009

В настоящее время я регистрирую приложение AJAX с сообщениями, которые включают время определенных взаимодействий. Итак, у меня есть пара мест, где код следует такой схеме:

var startTime = new Date();
this.doFunction();
var endTime = new Date();
logger.log("doFunction took " + (endTime - startTime) + " milliseconds.");

То, что я собираюсь сделать, это разделить синхронизацию на одну библиотечную функцию, которая принимает функцию в качестве параметра, чтобы выглядеть примерно так:

time : function(toTime) {
    var startTime = new Date();
    eval(toTime);
    var endTime = new Date();
    logger.log(toTime + " took " + (endTime - startTime) + " milliseconds.");
} 

(синтаксис может быть неправильным, я не слишком знаком с JavaScript)

Так что тогда вместо того, чтобы делать выбор времени, я бы просто сделал:

time(this.doFunction);

У меня вопрос: разные браузеры ведут себя по-разному, когда дело доходит до eval()? Например, запускать eval в новый поток, что приводит к неправильной синхронизации?

Буду признателен за любые другие советы по выбору времени.

Ответы [ 2 ]

1 голос
/ 20 января 2009

Нет. Все браузеры являются однопоточными в движке javascript. Я подозреваю, что вы также можете решить эту проблему, просто вызвав toTime () как функцию вместо использования eval (). Возможно, вы захотите взглянуть на объект javascript arguments и методы javascript " call " и "apply" для прозрачной пересылки аргументов, переданных вашей внешней функции "time", во внутренний " toTime "функция.

0 голосов
/ 20 января 2009

Eval должен быть синхронным.

Вы не должны использовать eval(), но toTime.call(), потому что вам следует избегать использования eval.

...