Как память обрабатывается с объектами JavaScript? - PullRequest
4 голосов
/ 19 января 2011

Дано:

Скажем, EventXObj - это объект javascript, который имеет много атрибутов и несколько методов.

EventXObj может быть связан с простым идентификатором строки следующим образом.

[ "id1" : Event1Obj , "id2": Event2Obj, ..., "id1000": Event1000Obj ]

И мы хотим представить, как один PlaceXObject может содержать много событий.

ВОПРОС:

В отношении следующего, занимает ли сценарий A гораздо больше памяти, чем сценарий B?

Сценарий A

PlaceX.events = [ "id1", "id2", "id75", ... ]

Сценарий B

PlaceX.events = [ Event1Obj, Event2Obj, Event75Obj, ... ]

Ответы [ 2 ]

2 голосов
/ 20 января 2011

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

Взяв в качестве примера текущую версию V8 (предполагая 32-битную):

  • Указатели = 4 байта.
  • Strings = 12 + [длина строки] байтов.
  • Объединенные строки = 12 + 2 * 4 байта (2 * 4, потому что это пара указателей на существующие строки). Тем не менее, вы можете использовать плоские строки, если хотите.
  • Словарь с n элементами = 3 * 4 * 2 * closestPowerOfTwo (n) байтов.

Теперь вы можете сделать математику для текущей версии V8.

2 голосов
/ 19 января 2011

Сценарий B, вероятно, является наиболее эффективным с точки зрения памяти с общей точки зрения. Все в JavaScript похоже на указатель / ссылку, поэтому B использует одно целое число (или около того) для каждого события, которое содержится в вашем массиве.

Сценарий A использует столько же памяти, сколько и ваши строки, поэтому для длинной строки это будет плохо. Для вашего случая с очень короткими строками разница невелика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...