2016-06-07 15 views
11

Wenn Sie dotnet run auf Ihrer MVC6-Anwendung ausführen dauert es lange auf erste Anfrage, aber dann funktioniert es offensichtlich gut. Ich habe versucht, Antworten in Google zu finden, aber es ist unmöglich, weil alles, was ich bekomme, Artikel über IIS ist, die ich überhaupt nicht verwende. Tatsächlich lasse ich den Code auf Ubuntu laufen.Ist es möglich, die App vorzuwärmen?

Ist es möglich, die dotnet run vorzuwärmen, so wird die erste Anfrage so schnell wie die zweite sein?

+4

Was ist mit der ersten Anfrage selbst, direkt nach dem Neustart, mit Curl? – Evk

+0

Mein aktuelles Deployment-Skript macht das tatsächlich, aber es ist nicht das, was ich will. – sed

+1

Es gibt zwei Gründe, warum Ihre Anwendung langsam ist, wenn Sie dotnet run verwenden - 1) Kompilierung der Anwendung 2) Kompilierung anzeigen. 'dotnet run' überprüft immer, ob sich die Anwendung geändert hat und falls dies der Fall ist, wird sie neu kompiliert (standardmäßig für jedes Zielframework). Wenn dies zum Ausführen einer Anwendung in der Produktion verwendet wird, verwenden Sie keinen dotnet-Lauf, sondern veröffentlichen Sie die Anwendung und führen Sie sie direkt aus. Wenn dies während der Entwicklung ist, stellen Sie sicher, dass Sie nur für das Framework kompilieren, in dem Sie die Anwendung ausführen. Ansichten werden zur Laufzeit kompiliert. Es könnte möglich sein, Ansichten vorher zu kompilieren, aber ich bin mir nicht 100% sicher. – Pawel

Antwort

1

Einige Vorschläge:

  1. die Release-Build verwenden, um den Code für den produktiven Einsatz optimiert ist und nicht das Debuggen (dotnet run --configuration Release)
  2. initiieren, um die erste Verbindung sich daher alle nachfolgenden Anforderungen Ihrer Kunden "sind warm“
  3. Compile die --native Flag verwendet, dann Host die Ergebnisse weiterer Vorteil von Performance-Optimierung

Schließlich (und dieser Punkt ist reine Spekulation), betrachten Sie möglicherweise Ihre veröffentlichte Website in einem Produktions-Webserver-Host (z. Apache oder IIS) und nicht vom dotnet cli. Diese kann Leistungsverbesserungen bieten, würde aber sicherlich "wärmende" Funktionen bieten, die nicht in der CLI vorhanden sind (ich weiß, IIS hat eine Always-On-Option).

+0

Wenn ich es in Apache oder Nginx starte, wird es nur ein Reverse-Proxy sein, also wird es sich nicht von CLI unterscheiden. Oder .NET hat bereits cgi-Implementierung? – sed

+0

Korrigieren. Es ist mehr der Fall, dass diese Server mehr funktionsreich sind, wie IIS immer im Modus hat. Außerdem können Sie eine Serverfarm mit mehreren Instanzen proxyed ausführen, sie dann einzeln aktualisieren und nur aktivieren, wenn sie warm sind. – tommed

Verwandte Themen