Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Низка скорость выполнения только при первом запуске (https://javascript.ru/forum/misc/79931-nizka-skorost-vypolneniya-tolko-pri-pervom-zapuske.html)

macsik12 08.04.2020 21:31

Низкая скорость выполнения только при первом запуске
 
Я тут заметил одну вещь. Когда я написал какой либо кусок кода. Какой либо алгоритм. Он в первый запуск в браузере выполняется 30мс - сколько угодно мс. Но при всех запусках после этого запуска отображает 1мс, 2мс, 0мс.
Вот код который создаёт массив рандомных чисел и сортирует его пузырьком.
let array = [];
for(let i = 0; i < 100; i++) {
  array.push(Math.floor(Math.random() * 100));
}


let last = array.length;
let start = Date.now();
for(let i = 0; i < last;) {
  let left = i;
  let right = i+1;
  if(array[left] > array[right]) {
    let buff = array[left];
    array[left] = array[right];
    array[right] = buff;
  }
  i = i + 1;
  if(i == last-1) {
    last--;
    i = 0;
  }
}

let end = Date.now();
console.log(`Массив отсортирован за ${end - start} миллисекунд`)


Я думаю мой код не очень хороший. Я только начинающий. Если кто то есть большие проблемы то поправьте если не сложно:)

рони 08.04.2020 22:02

macsik12,
можно так измерить продолжительность
https://developer.mozilla.org/ru/docs/Web/API/Console
let array = [];
for(let i = 0; i < 100; i++) {
  array.push(Math.floor(Math.random() * 100));
}


let last = array.length;
console.time('sort');
for(let i = 0; i < last;) {
  let left = i;
  let right = i+1;
  if(array[left] > array[right]) {
    let buff = array[left];
    array[left] = array[right];
    array[right] = buff;
  }
  i = i + 1;
  if(i == last-1) {
    last--;
    i = 0;
  }
}
console.timeEnd('sort');

рони 08.04.2020 22:11

macsik12,
можно так делать обмен содержимого ячеек, но это более затратно( для тех, кто считает 2ms слишком много, чем 1ms :) )

let array = [];
for(let i = 0; i < 100; i++) {
  array.push(Math.floor(Math.random() * 100));
}


let last = array.length;
console.time('sort');
for(let i = 0; i < last;) {
  let left = i;
  let right = i+1;
  if(array[left] > array[right]) [array[left], array[right]] = [array[right], array[left]];
  i = i + 1;
  if(i == last-1) {
    last--;
    i = 0;
  }
}
console.timeEnd('sort');
console.log(array)

macsik12 09.04.2020 12:53

Спасибо :)


Часовой пояс GMT +3, время: 14:42.