Ist Verhalten von eval Threading () variieren in verschiedenen Browsern?
-
19-08-2019 - |
Frage
Ich bin zur Anmeldung eine AJAX-Anwendung mit Nachrichten, die die Zeiten bestimmter Interaktionen umfassen. Also ich habe ein paar Stellen, wo der Code ein Muster wie dies folgt:
var startTime = new Date();
this.doFunction();
var endTime = new Date();
logger.log("doFunction took " + (endTime - startTime) + " milliseconds.");
Was ich aussehen zu tun ist, trennt das Timing in eine Library-Funktion, die eine Funktion als Parameter, so etwas wie aussehen:
time : function(toTime) {
var startTime = new Date();
eval(toTime);
var endTime = new Date();
logger.log(toTime + " took " + (endTime - startTime) + " milliseconds.");
}
(Syntax falsch sein kann, ich bin nicht allzu vertraut mit JavaScript)
Damit dann stattdessen das Timing zu tun, würde ich nur tun:
time(this.doFunction);
Meine Frage ist, haben verschiedene Browser unterschiedliche Verhalten haben, wenn es um eval()
kommt? Wie die eval in einen neuen Thread, so Rendering mein Timing nicht richtig?
Jede andere Ratschläge zum Zeitpunkt geschätzt werden würde.
Lösung
Nein. Alle Browser sind Single-Thread in der JavaScript-Engine. Ich vermute, dass Sie auch dieses Problem einfach durch den Aufruf Totime () als Funktion anstelle der Verwendung von eval () lösen können. Sie können in die Javascript Argumente Objekt aussehen soll und die javascript „ nennen “und‚Übernehmen‘Methoden transparent, die Argumente zu Ihrem äußeren weitergegeben weiterleiten „Zeit“ -Funktion auf die innere „totime“ Funktion.
Andere Tipps
Eval sollte synchron sein.
Sie sollten nicht verwenden eval()
aber toTime.call()
, weil Sie sollten mit eval vermeiden.