2017-01-25 4 views
0

私はアルファベットの頻度を数えるためのこの簡単な機能を持っています。JavaScriptで実行するたびに実行時間を確認する方法は?

私のコードは次のとおりです。

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

私は、入力ボックスにテキストを入力した後getFreq機能の実行速度を計算しますしています。しかし、ここではdosomething関数は入力ボックスにデータがなくても実行され、データを入力しても同じ実行時間を示します。

+3

なぜあなたはそのメソッド自体の中にあなたのログステートメントを置かないのですか? 'console.log(" doSomethingに電話する "+(t1 - t0)+" ms ")' –

+0

@AmeyaDeshpandeあなたは私のために仕事をしてくれてありがとう!ありがとうございました –

答えて

4

は、API console.time()とconsole.timeEnd()があるメソッドを実行する前sが空であることを確認します、uがこれを使用することができます詳細はAPI

からhttps://developer.mozilla.org/en-US/docs/Web/API/Console/time

はexampのためのスニペット下記参照ル。

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
  • パフォーマンステスト(t0t1は)メソッドの外であり、それが変更されなかったので、それは、何も前に実行されました。メソッドをメソッドの中に入れます。
  • 私も

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

if(s === "") –

1

console.time()後console.timeEnd(によって停止された名前の連結)を有するタイマを起動します。両方の関数呼び出しに渡されるタイマー名は、測定が機能するために一致する必要があります。

console.time()とconsole.timeEndは()のみクローム2は、Firefox 10、Safariの4、および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

これは私が何をしたいです

:すべてののonChangeコール

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

出力のために行うには

{"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. 
関連する問題