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

Мы используем веб-сервер 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 ответа

Решение

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

mono --aot /usr/lib/mono/1.0/mscorlib.dll
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done

Чтобы малина не компилировала ваш веб-сайт при каждом запуске 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)

Другие вопросы по тегам