Было бы очень интересно документировать производительность, связанную с массивами и объектами в JavaScript (особенно с Google V8). Я не нашел исчерпывающей статьи по этой теме в любом месте в Интернете.
Я понимаю, что некоторые объекты используют классы как свою базовую структуру данных. Если существует много свойств, это иногда рассматривается как хеш-таблица?
Я также понимаю, что массивы иногда обрабатываются как массивы С++ (т.е. быстрое случайное индексирование, медленное удаление и изменение размера). И в других случаях их обрабатывают скорее как объекты (быстрая индексация, быстрая вставка/удаление, большая память). И, возможно, иногда они хранятся в виде связанных списков (т.е. Медленная случайная индексация, быстрое удаление/вставка в начале/конце)
Какова точность выполнения запросов и манипуляций с массивами/объектами в 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... не так уж плохо.