Может ли кто-нибудь помочь описать два типа хранилища массивов в Javascript?

Я читаю эту статью о V8 на HTML5Rocks. Статья старая, но я почти ничего не понимаю, и это беспокоит меня. Я делаю это по одному шагу за раз, но может ли кто-нибудь помочь мне в разделе "Массивы"?

В статье говорится:

Массивы

Для обработки больших и разреженных массивов существуют два типа хранилище массивов внутри:

  • Быстрые элементы: линейное хранилище для компактных наборов клавиш

  • Элементы словаря: Хэш-таблица хранения в противном случае

Лучше не заставлять хранилище массивов переворачиваться с одного типа на другой.

Вопрос:

Что будет выглядеть линейный массив Быстрые элементы?

Что будет выглядеть массив хеш-таблиц Словарь Элементы?

В целях профилактики, как мне "перевернуть из одного типа в другой"?

Ответ 1

Я пойду немного по-другому.

2) Что будет выглядеть массив хэшей таблицы Dictionary Elements?

Объект JavaScript представляет собой карту из строки в значения. например.

var obj = {
  "name": "Sherlock Holmes",
  "address": "221B Baker Street"
}

V8 использует хеш-таблицы для представления объектов, не используя оптимизированное представление для особых случаев. Это очень похоже на использование словаря (слова, значение).

Теперь этот доступ к хэш-таблице медленный, потому что изначально все ключи и значения в хэш-таблице undefined. При вставке новой пары вычисляется хеш, и пара вставлена ​​в индекс вставки. Если в этом индексе уже есть ключ, попытайтесь вставить его в следующий и т.д.

1) Что будет выглядеть Fast Elements Линейный массив хранения?

В V8 a element является свойством , ключ которого является неотрицательным целым числом (0, 1, 2,...), т.е. простым линейным массивом, свойства которого можно получить через числовой индекс.

Быстрые элементы хранятся в непрерывном массиве. например.

var arr = [1, 2, 3];

Это особый случай, который оптимизирован для более быстрого доступа, поскольку индекс уже известен и не вычисляется.

3) Для целей профилактики, как бы я flip from one type to another?

Для быстрого элемента, если вы назначаете индекс таким образом за конец массива элементов, V8 может понизить элементы до словарного режима.

Ссылка: http://jayconrod.com/posts/52/a-tour-of-v8-object-representation

Ответ 2

сэр, я могу ошибаться, но в соответствии с вашим вопросом объясняется то, что я наблюдал.

когда мы инициализируем массив, который он внутренне получает ключ как 0,1,2.... и т.д., когда я подталкивал элемент со значением его в массив, но массив не считает его

ex :

var arr = new Array()

arr[0] = 1
arr[1] = 2
arr[2] = "myname";
arr['myname'] = nick;

но когда я делаю arr.length, я получаю 3, поэтому он не рассматривает ключ отдельно от числового, но если я пишу arr[3] = {myname:'nick'}, тогда он рассматривает его как элементы.

внутренне я думаю, чтобы сохранить линейный массив по-разному, он ищет '{}'