История изменений
Исправление
Legioner,
(текущая версия)
:
Для строковых ключей есть отдельная таблица отношения имя-хэш, а в коде обращение к свойству объекта компилируется в обращение к числовому хэшу.
Звучит сомнительно. Хочешь сказать, что любой код вида table[key]
по сути выполняется как table.get(globalStringCache.getInt(key))
? Наверное ты про код вида a.b
, когда ключ известен на этапе компиляции. Тогда эта оптимизация имеет смысл. Для произвольных строк key это просто будет забивать глобальный кеш и в 2 раза просаживать производительность на каждом обращении. В статье судя по всему это то, что они называют slow properties, т.е. обычная хеш-таблица.
PS что раздражает в JS: когда думаешь об оптимизации, надо думать про детали реализации V8, а не руководствоваться здравым смыслом. В Java это иногда тоже так, когда JIT определённый байткод или методы преобразует в очень эффективный машинный код, который работает быстрей вопреки логике, но чаще всего достаточно общего представления о том, как работает процессор.
Исправление
Legioner,
:
Для строковых ключей есть отдельная таблица отношения имя-хэш, а в коде обращение к свойству объекта компилируется в обращение к числовому хэшу.
Звучит сомнительно. Хочешь сказать, что любой код вида table[key]
по сути выполняется как table.get(globalStringCache.getInt(key))
? Наверное ты про код вида a.b
, когда ключ известен на этапе компиляции. Тогда эта оптимизация имеет смысл. Для произвольных строк key это просто будет забивать глобальный кеш и в 2 раза просаживать производительность на каждом обращении. В статье судя по всему это то, что они называют slow properties, т.е. обычная хеш-таблица.
Исправление
Legioner,
:
Для строковых ключей есть отдельная таблица отношения имя-хэш, а в коде обращение к свойству объекта компилируется в обращение к числовому хэшу.
Звучит сомнительно. Хочешь сказать, что любой код вида table[key]
по сути выполняется как table.get(globalStringCache.getInt(key))
? Наверное ты про код вида a.b
, когда ключ известен на этапе компиляции. Тогда эта оптимизация имеет смысл. Для произвольных строк key это просто будет забивать глобальный кеш и в 2 раза просаживать производительность на каждом обращении.
Исходная версия
Legioner,
:
Для строковых ключей есть отдельная таблица отношения имя-хэш, а в коде обращение к свойству объекта компилируется в обращение к числовому хэшу.
Звучит сомнительно. Хочешь сказать, что любой код вида table[key]
по сути выполняется как table.get(globalStringCache.getInt(key))
? Наверное ты про код вида a.b
, когда ключ известен на этапе компиляции. Тогда эта оптимизация имеет смысл. Для произвольных строк key это просто будет забивать глобальный кеш.