Огромная задержка при первом запросе браузера к веб-приложению Mono XSP - PullRequest
4 голосов
/ 16 ноября 2011

Мы используем веб-сервер Mono (2.10) XSP4 для размещения веб-приложения ASP.Net MVC3, работающего на Linux с открытым встроенным ПО (ARM).При запуске XSP4 требуется несколько секунд, пока он не будет готов и принимает запросы.Пока проблем с этим нет.

Но когда первый запрос от браузера / посетителя веб-сайта сделан, XSP4 использует весь ЦП, который он может получить в течение примерно 55 секунд, пока веб-страница (успешно) не отобразится в веб-браузере.Это происходит после каждого запуска / перезапуска XSP.

Первой моей мыслью было, что это компиляция всего веб-приложения как раз вовремя.Поэтому я создал пакет развертывания, который содержит только двоичные файлы, .css, .js и представления (.cshtml).Это сработало, но все равно имело такую ​​огромную задержку.

Затем я попытался предварительно скомпилировать это веб-приложение, используя Visual Studio (как указано в некоторых примечаниях к выпуску Mono).Снова веб-сайт работал хорошо, но огромная задержка все еще присутствовала.

Некоторые вопросы, которые на самом деле у меня на уме:

  1. Кто-нибудь знает, что делает веб-сервер XSP, когда первый браузер-вопрос приходит?Является ли это компиляцией "точно в срок", даже если это предварительно скомпилированное веб-приложение?
  2. Почему он делает это после каждого запуска снова?
  3. Можно ли вообще как-то уменьшить огромную задержку?
  4. Можно ли уменьшить огромную задержку, чтобы она выполнялась только при самом первом запросе браузера после обновления веб-приложения (кэшированного между последующими запусками XSP)?

Любая помощь / идеи будутотлично.

Обновление: Тем временем я обнаружил, что задержка вызвана сборкой dcms компилятора Mono / ASP.Net и компиляцией видов бритвы MVC3 в / tmp / root-aspnet.../ который отображается в память и, следовательно, не является постоянным.Сейчас я ищу способ контролировать, где XSP4 / Mono.WebServer / Mono-Asp.Net хранит эти скомпилированные файлы.Если кто-нибудь знаком с этим, дайте мне знать; -)

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Это могут быть собственные издержки компиляции (которые отличаются от того, что делает предварительная компиляция).Вы можете проверить, если AOTing системные библиотеки дают вам ускорение:

mono --aot /usr/lib/mono/1.0/mscorlib.dll
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done
0 голосов
/ 11 апреля 2018

Чтобы программа raspberry не компилировала ваш веб-сайт при каждом запуске XSP4, вы должны предварительно скомпилировать свой веб-сайт с помощью aspnet_compiler.exe и он находится в папке %WINDIR%\Microsoft.NET\Framework\v4.0.30319.

Вот пример:

aspnet_compiler.exe -p "d:\original website" -v / -c "d:\compiled website"

После компиляции вашего сайта загрузите его на свой Raspberry, и XSP / mono будет использовать скомпилированную версию вашего сайта. Ваш первый запрос будет намного быстрее.

Вот несколько ссылок:

Предварительная компиляция вашего сайта (C #)

Инструмент компиляции ASP.NET (Aspnet_compiler.exe)

...