LINUX.ORG.RU

История изменений

Исправление 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 это просто будет забивать глобальный кеш.