Какова производительность объектов / массивов в JavaScript? (специально для Google V8)

Было бы очень интересно задокументировать производительность, связанную с массивами и объектами в JavaScript (особенно Google V8). Я нигде в Интернете не нашел исчерпывающей статьи по этой теме.

Я понимаю, что некоторые Объекты используют классы в качестве своей базовой структуры данных. Если есть много свойств, они иногда рассматриваются как хеш-таблица?

Я также понимаю, что массивы иногда обрабатываются как массивы C ++ (т. Е. Быстрая случайная индексация, медленное удаление и изменение размера). А в других случаях они больше похожи на объекты (быстрая индексация, быстрая вставка / удаление, больше памяти).И, возможно, иногда они хранятся в виде связанных списков (например, медленная случайная индексация, быстрое удаление / вставка в начале / конце)

Какова точная производительность извлечения массивов / объектов и манипуляций в JavaScript? (специально для Google V8)

Более конкретно, каково влияние на производительность:

  • Добавление свойства к объекту
  • Удаление свойства из объекта
  • Индексирование свойства в объекте
  • Добавление элемента в массив
  • Удаление элемента из массива
  • Индексирование элемента в массиве
  • Вызов Array.pop ()
  • Вызов Array.push ()
  • Вызов Array.shift ()
  • Вызов Array.unshift ()
  • Вызов Array.slice ()

Также приветствуются любые статьи или ссылки для получения более подробной информации. :)

РЕДАКТИРОВАТЬ: Мне действительно интересно, как массивы и объекты 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 ... не так уж и плохо.

104
задан BMiner 15 December 2011 в 17:20
поделиться