Генерация байт-кода для двух подходов дает следующие результаты:
[generated bytecode for function: CodeBlock1]
Parameter count 7
Frame size 24
81 E> 0x1e25e29944ba @ 0 : a1 StackCheck
106 S> 0x1e25e29944bb @ 1 : 25 07 Ldar a0
0x1e25e29944bd @ 3 : 92 08 JumpIfToBooleanTrue [8] (0x1e25e29944c5 @ 11)
0x1e25e29944bf @ 5 : 25 06 Ldar a1
111 E> 0x1e25e29944c1 @ 7 : 92 04 JumpIfToBooleanTrue [4] (0x1e25e29944c5 @ 11)
0x1e25e29944c3 @ 9 : 25 05 Ldar a2
0x1e25e29944c5 @ 11 : 26 fb Star r0
128 S> 0x1e25e29944c7 @ 13 : 25 04 Ldar a3
0x1e25e29944c9 @ 15 : 92 08 JumpIfToBooleanTrue [8] (0x1e25e29944d1 @ 23)
0x1e25e29944cb @ 17 : 25 03 Ldar a4
133 E> 0x1e25e29944cd @ 19 : 92 04 JumpIfToBooleanTrue [4] (0x1e25e29944d1 @ 23)
0x1e25e29944cf @ 21 : 25 02 Ldar a5
0x1e25e29944d1 @ 23 : 26 fa Star r1
151 S> 0x1e25e29944d3 @ 25 : 25 fb Ldar r0
0x1e25e29944d5 @ 27 : 92 04 JumpIfToBooleanTrue [4] (0x1e25e29944d9 @ 31)
0x1e25e29944d7 @ 29 : 25 fa Ldar r1
0x1e25e29944d9 @ 31 : 26 f9 Star r2
169 S> 0x1e25e29944db @ 33 : a5 Return
Constant pool (size = 0)
Handler Table (size = 0)
[generated bytecode for function: CodeBlock2]
Parameter count 7
Frame size 0
81 E> 0x1b1ed00944ba @ 0 : a1 StackCheck
99 S> 0x1b1ed00944bb @ 1 : 25 07 Ldar a0
0x1b1ed00944bd @ 3 : 92 14 JumpIfToBooleanTrue [20] (0x1b1ed00944d1 @ 23)
0x1b1ed00944bf @ 5 : 25 06 Ldar a1
109 E> 0x1b1ed00944c1 @ 7 : 92 10 JumpIfToBooleanTrue [16] (0x1b1ed00944d1 @ 23)
0x1b1ed00944c3 @ 9 : 25 05 Ldar a2
112 E> 0x1b1ed00944c5 @ 11 : 92 0c JumpIfToBooleanTrue [12] (0x1b1ed00944d1 @ 23)
0x1b1ed00944c7 @ 13 : 25 04 Ldar a3
117 E> 0x1b1ed00944c9 @ 15 : 92 08 JumpIfToBooleanTrue [8] (0x1b1ed00944d1 @ 23)
0x1b1ed00944cb @ 17 : 25 03 Ldar a4
121 E> 0x1b1ed00944cd @ 19 : 92 04 JumpIfToBooleanTrue [4] (0x1b1ed00944d1 @ 23)
0x1b1ed00944cf @ 21 : 25 02 Ldar a5
126 S> 0x1b1ed00944d1 @ 23 : a5 Return
Constant pool (size = 0)
Handler Table (size = 0)
Первый «более сложный» в этом в куче промежуточное хранилище, а не просто стек, как во втором. CodeBlock1
использует больше места и больше инструкций.
Поэтому CodeBlock2
«более оптимизирован?» Это зависит от того, что вы хотите оптимизировать.
Попробуйте сами, используя [114 ], предполагая, что имя вашего скрипта - index.js
Предварительная компиляция сохраняет первый хит работа выполнения JIT-компиляции для сайта с большим количеством страниц, кто знает, какой длины это будет, прежде чем каждую страницу посещают и компилируют.
После того, как первый хит там не является никаким различием между страницей, скомпилировавшей JIT или pre-compilled.
Мы используем предварительную компиляцию, чтобы гарантировать, что веб-сайт на самом деле скомпилирует и не становится ловившим отсутствующей ссылкой или некоторой проблемой с продуктивной средой. Это также важно так, чтобы ни у какого пользователя не было другого опыта нашего сайта, потому что они должны ожидать JIT complilation.