Различается ли поведение потоков eval() в разных браузерах?

StackOverflow https://stackoverflow.com/questions/461138

  •  19-08-2019
  •  | 
  •  

Вопрос

В настоящее время я регистрирую приложение 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 в новый поток, что делает мое время неправильным?

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top