Firefox est rapide car il utilise ce qu'on appelle des Cordes (Cordes: une Alternative aux des Chaînes). Une corde est fondamentalement juste un DAG, où chaque Nœud est une chaîne de caractères.
Ainsi, par exemple, si vous n' a = 'abc'.concat('def')
, l'objet nouvellement créé devrait ressembler à ceci. Bien sûr, ce n'est pas exactement ce que cela ressemble à la mémoire, parce que vous avez encore besoin d'avoir un champ de type chaîne de caractères, de longueur et peut-être d'autres.
a = {
nodeA: 'abc',
nodeB: 'def'
}
Et b = a.concat('123')
b = {
nodeA: a, /* {
nodeA: 'abc',
nodeB: 'def'
} */
nodeB: '123'
}
Ainsi, dans le cas le plus simple de la VM doit faire presque pas de travail. Le seul problème est que cela ralentit les autres opérations de la chaîne résultante un peu. Aussi bien sûr, cela réduit la surcharge de la mémoire.
D'autre part ['abc', 'def'].join('')
habituellement juste allouer de la mémoire pour la disposition de la nouvelle chaîne de télévision en mémoire. (Peut-être cela devrait être optimisé)