用Javascript计算运行时间



我想制作下面的代码来计算运行循环所需的时间,但不知何故,我尝试过的东西都不起作用!

我试过使用日期,但它提供了非常不准确的时间。

我尝试过使用另一个间隔来检查元素是否已经存在,以及一些类似的解决方案,等等,但结果总是一样的,Javascript总是在循环结束之前检查东西!

var t = 0;
function myStartFunction() {
myVar = setInterval(function() {
t++;
document.getElementById("tempo").innerHTML = "Elapsed time: " + t + " segundos";
}, 1000);
}
myStartFunction();
function myStopFunction() {
clearInterval(myVar);
}
var n = "";
var i = 0;
while (i < 100000) {
n += "<br>" + i;
i++;
if (i == 100000) {
///////////////////clearInterval(myVar);
}
}
document.getElementById("range").innerHTML = n;
<!DOCTYPE html>
<html>
<body>
<h2 style="font-family:arial">TIME TO RUN LOOP</h2>
<hr> <br>
<button onclick="myStopFunction()">STOP</button> <br>
<p id="tempo" style='font-family:arial'>Elapsed time: 0 segundos</p>
<p id="range" style='font-family:arial'></p>
</body>
</html>

最好的答案是以以下格式提供经过的时间:00:00:00:0000

不需要按钮!

并且有一个正在工作的clearInterval(myVar);,其中当前有一个Javascript注释。

使用performance(请参阅MDN(。或者查看这个jsFiddle

let t = 0;
let start = performance.now();
let padZero = (v, n = 2) => `${v}`.padStart(n, "0");
let toTime = v => 
`elapsed (hh:mm:ss:ms) ${
padZero(Math.floor(v/(60*60000)))}:${
padZero(Math.floor(v/60000))}:${
padZero(Math.floor(v/1000))}:${
padZero(Math.floor(v%1000), 3)}`;
myStartFunction();
function myStartFunction() {
if (performance.now() > 10000) { 
return console.log(`${toTime(performance.now() - start)} END`);
}
console.log(toTime(performance.now() - start));
setTimeout(myStartFunction, 1000);
}
.as-console-wrapper { top: 0; max-height: 100% !important; }

更新:我用KooiInc代码以正确的格式制作了这个,并更改了Date.Time for performance.now((.

我更改了您的代码一点,这应该可以正确计算while循环的时间。注释掉其余的JavaScript代码,并将这些代码放入脚本中。

我不知道你对ClearIntervalFunction到底需要什么,但如果你能给我更多你需要的细节,我可以帮助你创建这个函数。

function loop() {
let n = "";
let i = 0;
while (i < 100000)
{
n += "<br>" + i;
i++;
}
return n;
}
function segundoFormatter(segundo) {
let zeros = 8;
let segundoArray = segundo.toString().split(".");
let number2Add = zeros - segundoArray[0].length;
let STR = "";
for(let i = 0; i < number2Add; i++){
STR += "0";
if(i == 1 || i == 3 || i == 5){
STR += ":";
}
}
let finalStr = STR + segundoArray[0] + segundoArray[1];
return finalStr.toString().substring(0,13);
}

window.onload = function(){
let startTime = performance.now() 
let n = loop();
let endTime = performance.now() 
let timeLoopTakes = (endTime - startTime);//00:00:00:0000
// segundoFormatter(timeLoopTakes);
document.getElementById("tempo").innerHTML = "Elapsed time: " + 
segundoFormatter(timeLoopTakes) + " segundos";
//You can uncomment this line belowand get like 10000 things in your dom
//document.getElementById("range").innerHTML = n;
}

您可以使用Date对象的getTime()函数来获取与当前时间关联的UNIX时间戳。

let initialTime = new Date().getTime();
for(let i = 0; i < 100000000; i ++) {
// do something
}
let finalTime = new Date().getTime();
console.log ('this took : ' +  (finalTime - initialTime) + ' milliseconds' );

最新更新