![](/img/trans.png)
[英]A common method in React/javascript to track execution time of all functions in a program
[英]Time execution of program - JavaScript
我想测量调用另外两个函数的 licz() function 的时间执行。 我使用的是 window.performance.now(); 以正确的方式? 因为无论我将数组的大小设置为 100、1000 还是 10000,时间都显示为 0 或 1 ms。 它有问题。 有人有什么想法吗? 我想根据时间执行和数组的大小制作一个图表,但首先我需要弄清楚为什么它对我不起作用。 不要在意波兰人的名字……我在乎这一次。
//generator tablicy
var size = 10000; // rozmiar tablicy
var max = 100; // maksymalna możliwa liczba do wylosowania
var tab = [];
for(k=0; k<size; k++)
{
input = Math.floor(Math.random() * max) + 1;
tab[k] = input;
}
tab.sort(function(a, b) {return a - b;}); // uporządkowanie tablicy
//------------------------------------------------
function licz(tab, w, n)
{
//indeks pierwszego wystąpienia "w"
idMin = pierwszy(tab, 0, n-1, w, n);
//jeśli "w" nie istnieje w tablicy
if (idMin == -1){return idMin};
//indeks ostatniego wystąpienia
idMax = ostatni(tab, idMin, n-1, w, n);
ile = idMax-idMin+1;
//zwracamy ilość powtórzeń wartości "w"
return ile;
}
function pierwszy(tab, l, p, w, n) //indeks pierwszego wystąpienia
{
if(l <= p) //l - początek zakresu listy p - koniec zakresu listy
{
mid = Math.floor((l+p)/2); //środkowy indeks, zaokrąglamy w dół gdy l;p to lista z parzystą liczbą elementów
if((mid == 0 || w > tab[mid-1])&&(tab[mid] == w)) //mid == 0 gdy tablica ma 1 element
{
return mid; // zwraca indeks pierwszego wystapienia
}
else if(w > tab[mid])
{
return pierwszy(tab, (mid+1), p, w, n);
}
else
{
return pierwszy(tab, l, (mid-1), w, n);
}
}
return -1;
}
function ostatni(tab, l, p, w, n)//indeks ostatniego wystąpienia
{
if(l <= p)
{
mid2 = Math.floor((l+p)/2);
if((mid2 == n-1 || w < tab[mid2+1]) && (tab[mid2] == w))
{
return mid2; //zwraca indeks ostatniego wystąpienia
}
else if(w < tab[mid2])
{
return ostatni(tab, l, (mid2-1), w, n);
}
else
{
return ostatni(tab, (mid2+1), p, w, n);
}
}
}
//Wywołanie funkcji
w = 49; // szukana wartość
n = tab.length; // długość tablicy
var start = window.performance.now();
ilosc = licz(tab, w, n); // zwraca liczbe powtórzeń szukanej wartośći w tablicy
var end = window.performance.now();
if(ilosc == -1)
{
document.write("Wartość "+w+" pojawiła się 0 razy<br/>");
}
else
{
document.write("Wartość "+w+" pojawiła się "+ilosc+" raz/razy<br/>");
}
console.table(tab); // wypisanie tablicy
console.log(`Time execution: ${end - start} ms`);
我认为这次不是代码问题,而是用户保护问题。
这可能足够快以执行您始终小于 1 毫秒,如果精度高于此,那么您将始终获得 0 毫秒或 1 毫秒。
这意味着,除非您将迭代次数提高到更多,否则您将看不到它所花费的实际时间。 可能是出于不同的原因,但我无法真正弄清楚您的代码,而且我的印象是它是二进制搜索。 这意味着在您使用 go 之前,您不会看到更多元素数量级的差异。
二进制搜索是log2(n)
,所以只添加一个零(意味着 n 现在是 10 * n)不会减少它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.