Pergunta

Atualmente, estou registrando um aplicativo AJAX com mensagens que incluem os tempos de certas interações. Então, eu tenho um par de lugares onde o código segue um padrão como este:

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

O que eu sou olhar a fazer é separar o tempo em uma função de biblioteca, que leva uma função como um parâmetro, para algo parecido com:

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

(Sintaxe pode estar errado, eu não estou muito familiarizado com JavaScript)

De modo que, em seguida, em vez de fazer o momento gostaria apenas de fazer:

time(this.doFunction);

A minha pergunta é, que diferentes navegadores têm um comportamento diferente quando se trata de eval()? Tais como disparando o eval em um novo segmento, tornando assim o meu tempo incorreta?

Qualquer outro conselho em tempo seria apreciada.

Foi útil?

Solução

No. Todos os navegadores são single-threaded no motor de JavaScript. Eu suspeito que você também pode resolver este problema simplesmente invocando totime () como uma função em vez de usar eval (). Você pode querer olhar para o objeto javascript argumentos eo javascript " chamada " e 'aplicar' métodos para transparente para a frente os argumentos passados ??para o exterior função de "tempo" para a função interna "totime".

Outras dicas

Eval deve ser síncrono.

Você não deve usar eval() mas toTime.call(), porque você deve evitar o uso de eval.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top