¿Las implementaciones comunes de JavaScript usan interning de cadenas?


¿Los motores JavaScript comunes, como V8 y JavaScriptCore de WebKit, usan interning de cadenas para cadenas JavaScript? ¿O realmente mantienen múltiples instancias de cadenas idénticas en la memoria?

Author: kpozin, 2011-03-11

2 answers

Sí. En general, cualquier cadena literal, identificador u otra cadena constante en la fuente JS es internada. Sin embargo, los detalles de implementación (por ejemplo, exactamente qué es internado) varían, así como cuándo se produce la internación.

Tenga en cuenta que un valor de cadena no es el mismo que un Objeto de cadena, sin embargo, los objetos de cadena no se internan porque eso sería un comportamiento fundamentalmente incorrecto.

 21
Author: olliej,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-11 18:40:51

Http://jsperf.com/strinterning

¡Sí en Chrome, no en Aurora 15 y FF 13! Comparar dos cadenas es 85% más lento que comparar dos punteros en Firefox. Sin embargo, es la misma velocidad en Chrome, que es una indicación de que se está comparando dos punteros.

Tal vez el equipo del motor JS en Mozilla debería comprobar su código...

 10
Author: Norman Pellet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-05 11:32:56