Если бы я рискнул предположить, я бы сказал, что это потому, что компилятор не может сказать, когда будет более оптимальным разбить ваши строки на переменные и объединить их.(И, как говорится, в первую очередь это относится к микрооптимизации.)
Например, следующий код:
if (test_case==="He fell down a well") {
var i=my_object_array.length-1;
while(i>=0) {
my_object_array[i].say("He fell down a well did he Lassie?");
i--;
}
}
Может быть перерисованвашим теоретическим компилятором как:
var x="He fell down a well";
if (a===x) {
var i=b.length-1;
while(i>=0) {
b[i].say(x+" did he Lassie?");
i--;
}
}
... что, конечно, увеличит время, необходимое для выполнения цикла while
.
Конечно, немного более интеллектуальный компилятор может распознать эту ловушку и оптимизировать ее еще больше:
var x="He fell down a well";
var x1=x+" did he Lassie?";
if (a===x) {
var i=b.length-1;
while(i>=0) {
b[i].say(x1);
i--;
}
}
В любом случае, хороший компилятор javascript, на мой взгляд, оптимизирует код в первую очередь для производительность и только во вторую очередь для подсчета символов.Поскольку это оптимизация в первую очередь для улучшения количества символов, я думаю, что, вероятно, просто не было достаточного спроса на него, чтобы оправдать время людей, которые поддерживают Closure и YUI Compressor.