Было бы очень интересно задокументировать производительность, связанную с массивами и объектами в 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 ... не так уж и плохо.