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

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

2 ответов


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

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


http://jsperf.com/strinterning

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

возможно, команда JS engine в Mozilla должна проверить свой код...