Используют ли распространенные реализации JavaScript интернирование строк?
Используют ли обычные движки JavaScript, такие как V8 и JavaScriptCore WebKit, интернирование строк для строк JavaScript? Или они действительно хранят в памяти несколько экземпляров одинаковых строк?
2 ответа:
Да. В общем случае любая литеральная строка, идентификатор или другая постоянная строка в источнике JS интернируется. Однако детали реализации (например, что именно интернируется) варьируются, а также когда происходит интернирование.
Обратите внимание, что строковое значение не совпадает со строковым объектом, хотя строковые объекты не интернируются, потому что это было бы принципиально неверным поведением.
Http://jsperf.com/strinterning
Да в Chrome, нет в Aurora 15 и FF 13! Сравнение двух строк на 85% медленнее, чем сравнение двух указателей в Firefox. Однако это та же скорость в Chrome, что указывает на то, что он сравнивает два указателя.
Может быть, команда JS engine в Mozilla должна проверить их код...