Стендап Сьогодні
📢 Канал в Telegram @stendap_sogodni
🦣 @stendap_sogodni@shevtsov.me в Федиверсі

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

19.01.2026

Динамічність — абстракція, яка тече

#JavaScript

Хотів прокоментувати пост з Федиверсу. Якщо коротко: чому в JavaScript звернення pixels[i*2+1] буде швидше за pixels[i].x? Ну тобто, чому масив значень швидше за масив обʼєктів зі значеннями?

Якби це був C чи навіть Go, то відповідь зрозуміла. Там масив — це блок даних в памʼяті, а обʼєкти — окремі блоки. Це зрозуміло, наприклад, тому, що для зміни довжини масиву його потрібно виділяти наново Але ж JavaScript дозволяє нам взагалі додавати елементи в будь-який індекс масиву, не зважаючи на його довжину. Тобто масиви в JavaScript - це очевидно не просто блок памʼяті. Чому ж все одно масив швидше?

Про представлення даних в JS я вже писав. Навіть в JS масив буде ну в гіршому випадку набором блоків памʼяті. А ще в тому пості є посилання на розгорнуту відповідь про те, що V8 та інші рушії здатні оптимізувати доступ до масиву десь до рівня мови зі статичною типізацією. А от кожний обʼєкт в JS зберігається в памʼяті окремо. Наскільки я знаю.

(Хто працює з C чи Go підтвердить — що там як раз легко зробити масив структур, який буде такий саме швидкий, як “голий” масив. Якщо це були структури, а не вказівники. Де-де, а в C оголошення структур для споживання блоків памʼяті — класична техніка.)

В JavaScript можна піти далі та зробити масив типу Float64Array. От він вже точно буде єдиним блоком памʼяті, як в статичній мові — з такими саме обмеженнями. Якби я робив щось з графікою, то, мабуть, його б і використовував… якщо без нього було б повільно, не треба оптимізувати наперед!

До чого я це все… Навіть в мові, яка не змушує тебе думати про розмір масиву чи типи даних, все одно різні мовні конструкції будуть швидше чи повільніше — незалежно від алгоритмічної складності.