Почему `var a =" ... "` быстрее, чем `var a = new String (" ... ")`? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь понять, как работает Javascript. Профилируя некоторый код, я обнаружил, что объявления, ориентированные на типизацию, медленнее, чем объявления, которые не являются «типизированными». Конечно, я знаю, что JS не является типизированным языком.

Я проверял это на Firefox, Chrome и Opera, всегда с одинаковыми результатами.

var repetitions = 10000000;

console.time("a");
for (var i=0; i<repetitions; i++) {
    var a = "...";
}
console.timeEnd("a");

console.time("b");
for (var i=0; i<repetitions; i++) {
    var b = new String("...");
}
console.timeEnd("b")

1 Ответ

1 голос
/ 20 июня 2019

В частности, в V8, если вы проверите сгенерированный байт-код (node --print-bytecode), вы получите что-то вроде этого:

> return "..."

LdaConstant [0]
Return 

> return new String("...")

LdaGlobal [0], [0]
Star r0
LdaConstant [1]
Star r1
Ldar r0
Construct r0, r1-r1, [2]
Return 

, что в основном означает, что строковый литерал просто загружает указатель из пула констант, в то время как new String включает в себя гораздо больше шагов - загрузка глобального объекта String, загрузка константы, вызов универсального метода Construct. Я полагаю, что в FF или любом другом движке все мало чем отличается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...