Я пытаюсь предоставить свою реализацию 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
0x, инструмент генератора Flame Graph для узла, отсутствует много данных на графике сгенерированного пламени ⇐ Javascript
Форум по Javascript
1745433071
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.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79589279/0x-the-flame-graph-generator-tool-for-node-is-missing-a-lot-of-data-in-the-gen[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия