2017-01-25 3 views
0

Ich habe diese einfache Funktion zum Zählen der Alphabete-Frequenz.Wie überprüft man die Ausführungszeit bei jedem Lauf in JavaScript?

Mein Code ist:

function getFreq(str){ 
 
    var freq={}; 
 
str.replace(/[a-z A-Z]/g, function(match){ 
 
    freq[match] = (freq[match] || 0) + 1; 
 
    return match; 
 
    }); 
 
    console.log(JSON.stringify(freq)); 
 
    return freq; 
 
} 
 

 

 

 
var t0 = performance.now(); 
 
function doSomething(s){ 
 
    getFreq(s); 
 
}; 
 
var t1 = performance.now(); 
 
console.log("Call to doSomething took " + (t1 - t0) + " ms.")
Enter Here : <input type="text" onchange="doSomething(this.value);" />

Ich habe wollen die Ausführungsgeschwindigkeit von getFreq Funktion zu berechnen, nachdem Sie Text in das Eingabefeld eingeben. Aber hier dosomething Funktion wird auch ohne Daten in das Eingabefeld ausgeführt und zeigt die gleiche Ausführungszeit, auch nach der Eingabe von Daten.

+3

Warum legen Sie Ihre Log-Anweisung nicht selbst in diese Methode? 'console.log (" Call to doSomething nahm "+ (t1 - t0) +" ms. ")' –

+0

@AmeyaDeshpande danke, du hast den Job für mich erledigt! Danke nochmal –

Antwort

4

gibt es api console.time() und console.timeEnd() leer sein, kann u diese verwenden api

für weitere Informationen - https://developer.mozilla.org/en-US/docs/Web/API/Console/time

unter Schnipsel sehen für Blutzuckerwer le.

function getFreq(str){ 
 
    var freq={}; 
 
str.replace(/[a-z A-Z]/g, function(match){ 
 
    freq[match] = (freq[match] || 0) + 1; 
 
    return match; 
 
    }); 
 
    console.log(JSON.stringify(freq)); 
 
    return freq; 
 
} 
 

 

 

 
function doSomething(s){ 
 
    console.time("getFreq"); 
 
    getFreq(s); 
 
    console.timeEnd("getFreq"); 
 
};
Enter Here : <input type="text" onchange="doSomething(this.value);" />

1
  • Es bevor etwas zu tun, durchgeführt wurde, weil die Leistungen Test (t0, t1) außerhalb des Verfahrens war, und es wurde nie geändert. Setzen Sie die Messung in die Methode ein.
  • Ich würde auch die s überprüfen Sie die Methode vor dem Ausführen

function getFreq(str){ 
 
    var freq={}; 
 
    str.replace(/[a-z A-Z]/g, function(match){ 
 
    freq[match] = (freq[match] || 0) + 1; 
 
    return match; 
 
    }); 
 
    console.log(JSON.stringify(freq)); 
 
    return freq; 
 
} 
 

 

 
function doSomething(s){ 
 
    if (s === "") 
 
    return; 
 
    var t0 = performance.now(); 
 
    getFreq(s); 
 
    var t1 = performance.now(); 
 
    console.log("Call to doSomething took " + (t1 - t0) + " ms.") 
 
};
Enter Here : <input type="text" onchange="doSomething(this.value);" />

+0

Danke für das Hinzufügen von if (s === "") –

1

console.time(), startet einen Zeitgeber mit dem Namen Verkettung, die später von console.timeEnd gestoppt wird(). Die Timer-Namen, die an beide Funktionsaufrufe übergeben werden, müssen übereinstimmen, damit die Messung funktioniert.

console.time() und console.timeEnd() werden nur von modernen Browsern unterstützt, mit Chrome starten 2, 10 Firefox, Safari 4 und Internet Explorer 11.

console.time("getFreq"); 
function getFreq(str){ 
    var freq={}; 
    str.replace(/[a-z A-Z]/g, function(match){ 
    freq[match] = (freq[match] || 0) + 1; 
    return match; 
    }); 

console.log(JSON.stringify(freq)); 
    return freq; 
} 
console.timeEnd("getFreq"); 
1

Das ist, was ich will zu tun, für jeden onChange Anruf

function getFreq(str){ 
 
    var t0 = performance.now(); 
 
    var freq={}; 
 
str.replace(/[a-z A-Z]/g, function(match){ 
 
    freq[match] = (freq[match] || 0) + 1; 
 
    return match; 
 
    }); 
 
    console.log(JSON.stringify(freq)); 
 
    var t1 = performance.now(); 
 
    console.log("Call to doSomething took " + (t1 - t0) + " ms.") 
 
    return freq; 
 
    
 
}
<input type="text" onchange="getFreq(this.value);" />

Ausgabe:

{"a":1,"b":1,"c":3," ":2,"A":1,"D":1} 
Call to doSomething took 1.4000000000014552 ms. 
{"a":1,"b":1,"c":4," ":3,"A":2,"D":1} 
Call to doSomething took 1.9250000000029104 ms. 
Verwandte Themen