2008-09-11 17 views
5

Ich entwickle eine (relativ kleine) Website in ASP.Net 2.0. Ich benutze auch nAnt, um einige einfache Optimierungen an meinem Projekt durchzuführen, bevor ausführbare Dateien geliefert werden. In seinem aktuellen Zustand ist die Website „vorkompilierte“ mitPrecompilation und Startzeiten auf ASP.Net

aspnet_compiler.exe -nologo -v ${Appname} -u ${target}

Ich habe bemerkt, dass nach dem IIS-Pool (nach einer Leerlaufabschaltung oder ein Recycling) neu gestartet wird, nimmt die Anwendung bis zu 20 Sekunden bevor es wieder online ist (und Application_start ist erreicht).

Ich habe nicht das gleiche Problem, wenn ich direkt in Visual Studio debuggen (es dauert 2 Sekunden zu starten), also frage ich mich, ob der Aspnet_compiler wirklich so eine gute Idee ist.

Ich konnte nicht viel auf MSDN finden. Wie kompilieren Sie Ihre Websites für die Produktion?

Antwort

4

Stellen Sie sicher, dass:

  1. Sie sind ein webanwendungsprojekt mit statt einer Web-Site-Projekt, das für Ihren Code in einem vorkompilierte führt hinter
  2. Sie haben Debug-Code-Generierung ausgeschaltet in die Datei web.config - ich denke, wenn dies ist anders, wenn Sie verwendet aspnet_compiler der Code

neu kompiliert werden können, wenn ihr die versucht haben, könnten Sie vielleicht versuchen ngen über Ihre Montage läuft somit die JIT-Zeit zu sparen?

1

Stellen Sie sicher, dass dies in web.config <compilation debug=false> festgelegt ist. In meinem Fall habe ich auch eine Batch-Datei, die Anfragen für alle Hauptseiten abruft, bevor sie den Benutzern gegeben wird (Simulation zum Laden von Seiten).

0

@ Simon:

  • Das Projekt ist eine Web-Anwendung. Websites sind dann langsamer beim Start (ich hatte keine Ahnung, dass es neben der unterschiedlichen Code-Organisation eine Inzidenz hatte)?
  • Ich habe überprüft, und während ich die web.config nach dem Aufruf von aspnet_compiler bearbeitet habe, berühre ich nicht den Debug-Wert (Ich werde jedoch überprüfen, die Website ist nicht schneller zu starten, wenn ich nicht die web.config, nur um sicherzugehen)

(Und ich werde auf jeden Fall einen Blick auf ngen, ich dieses Werkzeug nicht bewusst war.)

+0

Ich denke, das Web-Anwendungen gegen Websites, was eigentlich mit dem aktualisierbaren Bit zu tun kann sein, wie erwähnt - meine apps sind nicht aktualisierbar markiert. Ich denke, du hast wahrscheinlich recht, was die Organisation betrifft, ich müsste etwas mehr spielen, um es zu bestätigen. –

2

Wenn Ihre Website als aktualisierbar kompiliert wird, Sie ein Bündel sehen wird von .ASPX-Dateien in Ihrem virtuellen Verzeichnis. Diese müssen beim Start kompiliert werden. Auf diese Weise können Sie das Web-Interface selbst ändern. Dies ist der Standard für Websites und Webanwendungen.

4

Für ultimative Reaktionsfähigkeit, erlauben Sie nicht, dass Ihre App heruntergefahren wird.

Die erste Methode ist sicherzustellen, dass es unglaublich beliebt ist, so dass es immer jemanden gibt, der es benutzt.

Alternativ kann das Abrufen einer kleinen Keep-Alive-Seite von einer anderen Stelle als geplante Aktivität verwendet werden, um Ihre Site "heiß" zu halten.

+0

Ich finde es interessant, dass zwei Leute meine Antwort ohne Kommentar abgelehnt haben, obwohl es ein realistischer Ansatz ist, der von einigen sehr großen Systemen verwendet wird. Beachten Sie, dass DotNetNuke für genau diesen Zweck keepalive.aspx enthält. –

+0

Nicht ich, aber ich würde annehmen, die Downvotes sind, weil dies die Startzeit nicht reduziert. Darüber hinaus ist dies in IIS7.5/.Net 4 nicht erforderlich, da ASP.Net 4.0 mit einer Auto-Start-Funktion ausgeliefert wird, die dasselbe bewirkt. – Brian

1

Der Schlüssel ist, sicherzustellen, dass der IIS-Anwendungspool nie heruntergefahren wird. Dies ist, wo der Code tatsächlich gehostet wird.Stellen Sie "Idle Timeout" (unter Erweiterte Einstellungen) auf etwas sehr hohes, wie 1440 Minuten (24 Stunden), um sicherzustellen, dass es nicht heruntergefahren wird, solange jemand Ihre Website einmal täglich besucht.

Sie haben immer noch die JIT-Zeit, wenn Sie neuen Code bereitstellen oder wenn diese Zeitüberschreitung im Leerlauf überschritten wird.

Configuring IIS 7.x Idle Timeout