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.");

私がやろうとしているのは、タイミングを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を新しいスレッドに発射して、タイミングを不正確にするなど。

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

役に立ちましたか?

解決

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

他のヒント

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

evalの使用を避ける必要があるため、eval()ではなくtoTime.call()を使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top