Продуктивність, пов’язана з масивами та об’єктами в JavaScript (особливо Google V8), було б дуже цікаво документувати. Я не знайду жодної вичерпної статті на цю тему ніде в Інтернеті.
Я розумію, що деякі Об'єкти використовують класи як основу структури даних. Якщо властивостей багато, це іноді трактується як хеш-таблиця?
Я також розумію, що масиви іноді трактуються як масиви C ++ (тобто швидка випадкова індексація, повільне видалення та зміна розміру). В іншому випадку до них трактуються більше як до об'єктів (швидка індексація, швидке вставлення / видалення, більше пам'яті). І, можливо, іноді вони зберігаються як пов'язані списки (тобто повільна випадкова індексація, швидке видалення / вставка на початку / в кінці)
Яка точна ефективність пошуку та маніпуляцій з об’єктами та маніпуляціями в JavaScript? (спеціально для Google V8)
Більш конкретно, на що це впливає на ефективність:
- Додавання властивості до об’єкта
- Видалення властивості з Об'єкта
- Індексація властивості в об'єкті
- Додавання елемента до масиву
- Видалення елемента з масиву
- Індексація елемента в масиві
- Виклик Array.pop ()
- Виклик Array.push ()
- Виклик Array.shift ()
- Виклик Array.unshift ()
- Виклик Array.slice ()
Будь-які статті та посилання для отримання більш детальної інформації також будуть вдячні. :)
EDIT: Мені дуже цікаво, як масиви та об’єкти JavaScript працюють під кришкою. Також у якому контексті двигун V8 «знає» переходити на іншу структуру даних?
Наприклад, припустимо, я створюю масив за допомогою ...
var arr = [];
arr[10000000] = 20;
arr.push(21);
Що насправді відбувається тут?
Або ... що з цим ... ???
var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
var item = arr[i].shift();
//Do something with item...
}
Для звичайних масивів продуктивність буде жахливою; тоді як, якщо використовується LinkedList ... не так вже й погано.