0x, инструмент генератора Flame Graph для узла, отсутствует много данных на графике сгенерированного пламениJavascript

Форум по Javascript
Ответить
Anonymous
 0x, инструмент генератора Flame Graph для узла, отсутствует много данных на графике сгенерированного пламени

Сообщение Anonymous »

Я пытаюсь предоставить свою реализацию Heap, поэтому я создал этот скрипт: < /p>
class BinaryHeap {
array;
comparator;

constructor(comparator) {
this.array = [];
this.comparator = comparator;
}

static getParentIndex(index) {
return (index - 1) >> 1;
}

static getLeftChildIndex(index) {
return 2 * index + 1;
}

static getRightChildIndex(index) {
return 2 * index + 2;
}

#swap(index1, index2) {
[this.array[index1], this.array[index2]] = [
this.array[index2],
this.array[index1],
];
}

#compare(index1, index2) {
return this.comparator(this.array[index1], this.array[index2]);
}

siftDown(index) {
const value = this.array[index];

const end = BinaryHeap.getParentIndex(this.array.length - 1);
while (index = this.array.length || this.#compare(left, right) < 0
? left
: right;

if (this.comparator(value, this.array[childIndex]) < 0) break;
this.array[index] = this.array[childIndex];
index = childIndex;
}

this.array[index] = value;
}

siftUp(index) {
const value = this.array[index];

let parentIndex = BinaryHeap.getParentIndex(index);
while (
parentIndex >= 0 &&
this.comparator(this.array[parentIndex], value) > 0
) {
this.array[index] = this.array[parentIndex];
index = parentIndex;
parentIndex = BinaryHeap.getParentIndex(index);
}

this.array[index] = value;
}

pop() {
if (this.array.length === 0) return;
if (this.array.length === 1) return this.array.pop();

this.#swap(0, this.array.length - 1);
const value = this.array.pop();
this.siftDown(0);

return value;
}

push(item) {
this.array.push(item);
this.siftUp(this.array.length - 1);
}
}

function compareFn(a, b) {
return a - b;
}
const heap = new BinaryHeap(compareFn);

for (let i = 0; i < 10_000_000; i++) { heap.push(i) }
for (let i = 0; i < 10_000_000; i++) { heap.pop() }
< /code>
, а затем профилируйте его с помощью команды, используя 0x, как предложено node.js - Создание страницы документации Flamegraph < /p>
0x -o heap.js
< /code>
Но полученный график пламени, похоже, отсутствует много образцов. Функции Push, POP, Siftup и Siftdown отображаются только один раз, а иногда и в 0 раз из 102 образцов. Куда пошли остальные 100-102 образцов? И какой большой *(анонимный) блок, который был отобран в 84 раза? src = "https://i.sstatic.net/xvdv3gii.png"/>
Перемещение кода в HTML-файл, а затем используя встроенный профилировщик производительности Chrome, я получаю гораздо более подробную визуализацию без столько же отсутствующих данных. Это то, что я тоже хочу от 0x.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... in-the-gen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»