Производительность ASP.NET: веб-приложение без предварительной компиляции

Генерация байт-кода для двух подходов дает следующие результаты:

CodeBlock1

[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)

CodeBlock2

[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 «более оптимизирован?» Это зависит от того, что вы хотите оптимизировать.

  • CodeBlock1: легче читать и легче отлаживать с помощью средства отладки
  • CodeBlock2: занимает меньше памяти и выполняет меньше инструкций

Попробуйте сами, используя [114 ], предполагая, что имя вашего скрипта - index.js

5
задан Ishmaeel 22 October 2008 в 12:04
поделиться

1 ответ

Предварительная компиляция сохраняет первый хит работа выполнения JIT-компиляции для сайта с большим количеством страниц, кто знает, какой длины это будет, прежде чем каждую страницу посещают и компилируют.

После того, как первый хит там не является никаким различием между страницей, скомпилировавшей JIT или pre-compilled.

Мы используем предварительную компиляцию, чтобы гарантировать, что веб-сайт на самом деле скомпилирует и не становится ловившим отсутствующей ссылкой или некоторой проблемой с продуктивной средой. Это также важно так, чтобы ни у какого пользователя не было другого опыта нашего сайта, потому что они должны ожидать JIT complilation.

8
ответ дан 14 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: