Skip to main content

Що таке "bottleneck" в алгоритмах?

1. Що означає "bottleneck"

Bottleneck (вузьке місце) - це частина алгоритму (або системи), яка обмежує загальну продуктивність, тобто найповільніша або найресурсомісткіша частина, через яку все інше працює повільніше.

Назва походить від "шийки пляшки": крізь вузьке горлечко рідина тече повільно, хоча сама пляшка може бути великою.


2. У контексті алгоритмів

В алгоритмі bottleneck - це операція або ділянка коду, чия часова або просторова складність домінує над іншими частинами.

Приклад:

javascript
function processData(data) { // 1. Швидка фільтрація (O(n)) const filtered = data.filter(x => x > 10); // 2. Сортування (O(n log n)) const sorted = filtered.sort((a, b) => a - b); // 3. Легкий прохід (O(n)) return sorted.map(x => x * 2); }

Bottleneck тут - сортування (O(n log n)), тому що саме вона визначає загальну продуктивність. Навіть якщо оптимізувати інші кроки, прискорення буде мінімальним.

Загальна складність:

O(n) + O(n log n) + O(n) ≈ O(n log n)


3. Приклад із числовим ефектом

ЕтапЧасЧастка від загального
Фільтрація10 мс5%
Сортування170 мс85%
Постобробка20 мс10%

"Вузьке місце" - сортування. Оптимізація інших 15% майже не дасть приросту.

Закон Амдала:

покращення 90% коду не має сенсу, якщо 10% залишаються bottleneck.


4. Як знаходять bottleneck

У браузері:

  • Chrome DevTools → Performance → шукаємо, де "горить" більше CPU.
  • Lighthouse → показує "Long tasks", "Recalculate Style", "Layout".

У Node.js:

  • --inspect → Flamegraph у DevTools;
  • clinic.js, 0x, node --prof;
  • вимірювання з performance.now(), console.time().

В алгоритмах:

  • Теоретичний аналіз складності (Big O);
  • Вимірювання часу на великих вхідних даних;
  • Порівняння частин функції (loop, recursion, sort, filter).

5. Типові bottlenecks у JS-коді

КатегоріяПрикладЧому "вузьке місце"
CPU-boundвеликі цикли, сортування, рекурсіїблокують event loop
Алгоритминеефективна структура даних (пошук у масиві замість Map)зростає складність
Пам'ятьзберігання великих структур без очищенняGC, лаги
I/Oмережеві запити, читання файлівчекаємо відповідь
DOMчасті reflow/repaintдовгий рендер
Reactзайві перерендери, повторне створення функційнавантаження на reconciliation

6. Як усувають bottlenecks

ПідхідЩо робить
Профілюванняспочатку вимірюємо, де "вузьке місце"
Оптимізація алгоритмузамінюємо O(n²) на O(n log n)
Мемоізація / кешуванняповторно використовуємо обчислення
Паралелізація (Web Workers)переносимо CPU-важке в інший потік
Асинхронність / batchingробимо I/O-операції неблокуючими
Оптимізація пам'ятівидаляємо зайві об'єкти
Вибір іншої структури данихSet замість Array.includes(), Map замість Object

7. Аналогія

Уяви фабрику:

  • Один верстат виробляє 100 деталей/хв.
  • Другий обробляє 10 деталей/хв. → саме він стає bottleneck.
  • Навіть якщо прискорити перший верстат, швидкість усієї системи не зросте, поки не оптимізуєш другий.

8. Коротке резюме

ТермінЗначення
BottleneckНайповільніша частина алгоритму, що обмежує загальну продуктивність
ПроявТривале виконання, висока завантаженість CPU, затримки
Як знайтиПрофілювання, вимірювання, аналіз Big O
Як усунутиЗмінити алгоритм, структуру даних, розпаралелити

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.