0

私は現在、特定の対話の時間を含むメッセージで AJAX アプリケーションをログに記録しています。したがって、コードが次のようなパターンに従う場所がいくつかあります。

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

私がやろうとしているのは、タイミングを、関数をパラメーターとして取る 1 つのライブラリー関数に分割して、次のようにすることです。

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 を新しいスレッドに発射して、タイミングが不正確になるなど?

タイミングに関するその他のアドバイスをいただければ幸いです。

4

2 に答える 2

1

いいえ。すべてのブラウザーは、javascript エンジンでシングルスレッド化されています。eval() を使用する代わりに関数として toTime() を呼び出すだけでも、この問題を解決できると思います。外側の「time」関数に渡された引数を内側の「toTime」関数に透過的に転送するには、javascript引数オブジェクトと javascript の「call 」および「apply」メソッドを調べてください。

于 2009-01-20T12:48:00.987 に答える
0

Eval は同期する必要があります。

eval の使用を避ける必要があるため、eval()butは使用しないでください。toTime.call()

于 2009-01-20T12:49:47.957 に答える