Well, what are we waiting for, then.
In fact, the JVM already has moved to a mix of ISO-8859-1/Latin-1 and UTF-16 (https://openjdk.org/jeps/254), and I expect many performant JavaScript implementations also do something in that direction.
For Java it’s a good saving because it reduces the overall heap size, and if JS has a similar distribution of objects then it should work well there as well. It may already do so, the internal storage format of things like strings and arrays is deliberately opaque.
If so, using UTF-8 and only converting to UTF-16 the moment such seeking happens may be beneficial.
Problem, however, is that Java and JavaScript have C-style for loops that give false positives, where the code indexes into the string in order to iterate over it.
The issue is not new. JavaScript runtimes frequently use multiple optimized string types for various situations:
https://github.com/danbev/learning-v8/blob/master/notes/stri...
They make it simpler, but it also is possible to detect that loops are iteration-style access in disguise.
That takes time, so its more likely to happen in ahead of time compiled languages.
C compilers can vectorize some of such loops, so they have logic for doing that.