Используют ли распространенные реализации JavaScript интернирование строк?


Используют ли обычные движки JavaScript, такие как V8 и JavaScriptCore WebKit, интернирование строк для строк JavaScript? Или они действительно хранят в памяти несколько экземпляров одинаковых строк?

2 29

2 ответа:

Да. В общем случае любая литеральная строка, идентификатор или другая постоянная строка в источнике JS интернируется. Однако детали реализации (например, что именно интернируется) варьируются, а также когда происходит интернирование.

Обратите внимание, что строковое значение не совпадает со строковым объектом, хотя строковые объекты не интернируются, потому что это было бы принципиально неверным поведением.

Http://jsperf.com/strinterning

Да в Chrome, нет в Aurora 15 и FF 13! Сравнение двух строк на 85% медленнее, чем сравнение двух указателей в Firefox. Однако это та же скорость в Chrome, что указывает на то, что он сравнивает два указателя.

Может быть, команда JS engine в Mozilla должна проверить их код...