2009-06-15 4 views
11

Wo ich arbeite, machen wir eine sehr große Anzahl sehr kleiner ASP.NET-Apps, und es ist ein paar Mal passiert, dass Websites im vorkompilierten Format bereitgestellt wurden, und die App muss geändert werden, aber die Version des Codes verfügbar in der Quellcodeverwaltung ist veraltet und der Entwickler ist nicht verfügbar. Die DLL der App muss dekompiliert und wieder zusammengehackt werden.Soll ich ASP.NET 2.0-Sites vor der Bereitstellung vorkompilieren oder nicht?

Idealerweise würde es niemals passieren, dass ein Entwickler eine Änderung durch Tests und Produktion einleitet und die Änderung nicht einliest. Seitdem haben wir Änderungen an unseren Richtlinien vorgenommen, aber ich frage mich, ob der Aufwand für die Erstellung einer Wenn der App-Pool neu gestartet wird, ist die Website auf dem Server ein Problem, das groß genug ist, um den Upload unseres Codes auf den Server zu vermeiden. Es wäre einfacher, die Version in der Quellcodeverwaltung als die tatsächliche Live-Version zu überprüfen, wenn wir die Live-Quelle herunterladen könnten.

Welche Vorteile hat das Vorkompilieren von VS, indem CS-Dateien direkt auf den Server hochgeladen und dort kompiliert werden?

+9

Wenn Sie Entwickler machen direkte Änderungen an der Produktionscode haben, Quellcodeverwaltung und Ihre Standard-Release-Prozess zu umgehen, haben Sie weit größere Probleme als sich Gedanken über Precompilieren. – ahockley

+2

Einverstanden, aber ich versuche, Verbesserungen zu machen, wo ich kann. Größere organisatorische Probleme, die ich nicht lösen kann, sind kein Grund, sich nicht mit Dingen zu beschäftigen, die ich auf meiner Ebene beeinflussen kann. – NetHawk

Antwort

0

Es hängt von der Größe der Anwendungen und der Häufigkeit der Verwendung ab. Wenn es regelmäßig genug verwendet wird, dass der App-Pool nur am Ende des Tages recycelt wird, kann sich ein kurzes Warten auf den ersten Start am Morgen lohnen. Wenn es nur alle 30 Minuten einmal getroffen wird und ein erneutes Kompilieren erzwingt, kann es sich lohnen, es vorkompilieren zu lassen.

Natürlich, wenn es eine sehr große App ist, die eine Weile dauert, um beim ersten Lauf zu kompilieren, würde ich mich auf Precompiling neigen, vor allem, wenn es nicht ständig verwendet wird.

+1

Ich habe eine Reihe von ASP.net-Anwendungen im lokalen Intranet. Sie alle werden als Quellcode bereitgestellt. Einige von ihnen werden eher selten benutzt. Aber nach dem allerersten Kompilieren scheinen sie immer sehr schnell zu kommen. Haben Sie eine Quelle für Ihre Informationen über eine 30-minütige Cache-Zeitüberschreitung? Meine Erfahrung scheint etwas anderes zu bedeuten. – recursive

+0

Der Anwendungspool wird nach 20 Minuten wiederverwendet. Wenn Sie ihn also kurz danach drücken, erhalten Sie den Start-/Kompilierungstreffer. –

+0

Die Apps sind nicht sehr groß, wirklich nur ein paar Seiten und Assemblies. Ich habe versucht, auf einige Server zuzugreifen, die nicht vorkompiliert und nur bereitgestellt wurden. Die Zeit, die es braucht, um auf diese zuzugreifen, war spürbar (ich habe danach gesucht), aber nicht so schlimm. Die meisten von ihnen sehen auch nicht viel Zugang. – NetHawk

0

Der Hauptvorteil besteht in der Kompilierung der Leistung auf dem Webserver. Außerdem schützt es Ihren Code, weil es schwerer ist, den Code aus der Assembly zu lesen :-)

+0

Schützt Ihren Code vor wem? Der Kunde? –

+2

Eigentlich Ishtar, es ist fast trivial, eine .NET Assembly mit Reflector zu dekompilieren. Da der Webserver keine Dateien bereitstellt, die in ASP.NET geschützt werden sollen, wie .cs-Dateien und Ihre Webkonfiguration, ist das wirklich ein großer Vorteil? Ich stimme zu, dass Leistung das beliebteste Anliegen ist. Danke für deine Antwort. – NetHawk

+0

Jedes Programm kann dekompiliert werden. Aber es ist "schwerer" es zu lesen. Wenn Sie nicht kompilierte Projekte veröffentlicht haben, kann jeder direkt Ihren Code ändern. –

1

Aus rein benutzerfreundlicher Sicht mag ich es einfach, die Quelldateien auf den Server zu laden und das Vorkompilieren zu vergessen.

Dies ist, was ich für alle Websites, die ich verwalte, tun, auch die großen. Ich versuche, mir die Angewohnheit zu machen, die wichtigeren Teile der Anwendung zu treffen, um sicherzugehen, dass alles funktioniert (und sie während des Spiels zu kompilieren).

Und hier ist ein weiterer Gedanke. Wenn die Seite öffentlich ist, können Sie die w3c link checker loslassen. Dies hat den Effekt, dass jede Seite, auf die es trifft, kompiliert wird. Und es ist trotzdem nett, sicherzustellen, dass Sie keine kaputten Links haben.

Einfach ausgedrückt, nehme ich an, dass diese Routinekontrollen das Problem der langsamen Erstbesuch-Kompilierung von Ihren Benutzern fast beseitigen. Und da es sowieso eine gute Routine ist, hat es für mich gut funktioniert.

+0

Danke, Steve. Wird jede Seite separat kompiliert? Es scheint, als wäre der Leistungshit auf die erste Anfrage zurückzuführen. – NetHawk

+0

Die aspx-Dateien werden separat kompiliert. In der typischen Konfiguration sind die Code-Behinds nicht, da sie in eine DLL gerollt werden. –

0

ich Dateien hochladen, ohne Vorkompilieren: auf diese Weise, da mein Code sehr fehlerhaft ist, ich es mit Notepad ++ direkt vom Server korrigieren

Auch Visual Web Developer 2008 (die freie ein) nicht die kompilierende Option :-P

8

Ich stimme den meisten Antworten zu diesem Punkt nicht zu. Die Vorkompilierung von Ad-hoc-Postings von Dateien hat viele Vorteile, nicht zuletzt, dass der Code in den Produktions- und Testumgebungen mehr oder weniger synchron bleibt. Das Vorkompilieren stellt sicher, dass der Code, den Sie getestet haben, der Code ist, der zur Produktion alle Zeit wird.

Das Problem, mit dem Sie konfrontiert werden, ist nicht einer der Kompilierung vor der Kompilierung versus der ersten Kompilierung. Stattdessen stammt sie von der Art der Quellcodeverwaltung, die Sie verwenden. Wenn ich raten müsste (und ich tue), würde ich sagen, dass Sie Visual SourceSafe ausführen.Wenn Sie zu einem Quellcodeverwaltungssystem wechseln würden, das Verzweigungen erzeugt und trivial zusammenführt, dann können Sie Ihren Code in stable und development Verzweigungen trennen. Fehlerbehebungen passieren bei den Zweigen dev (die nach der Validierung wieder in den Zweig stable zusammengeführt werden). Auf diese Weise endet ungeprüfter Code oder Code, der nicht zum Primetime bereit ist, nicht auf dem Produktionsserver und Sie haben immer eine Kopie von stable, mit der Sie arbeiten können.

+0

Danke, Rob. Ich wähle das als einen guten Kontrapunkt und trotzig nützlich. Das scheint ein guter Prozess zu sein, und unser gesamtes System hier ist wirklich ad-hoc. Du hast recht, dass wir hier SS benutzen, und ich würde gerne etwas Besseres benutzen. – NetHawk

2

Das erste, was in den Sinn kommt, ist:

  1. Geschäftsgeheimnisse Probleme
  2. Sicherheitsprobleme
  3. Sloppy Joe Moe die (Faul, Unvorsichtige und Pitiful sein wollen Entwickler)
  4. Ad Hoc Den Code außer Kontrolle zu bringen.

    • vorkompilierte-Code sicher und effizient läuft auf dem .Net Framework in einem verwalteten Format.
    • Uncompiled Code wird von Rookies bereitgestellt, die sich nicht die Zeit genommen haben, die vielen mit unsicherem Code verbundenen Probleme zu berücksichtigen, die für den Endbenutzer weniger effizient sind.

Endnutzern sind Stake Holders und sind Gegenstand eines Fiduciary Verantwortlichkeiten des Entwicklers. Entwickler sollten die Gelegenheit nutzen, um ihre Produkte effizient zu verbessern.

DISCLAIMER: Diese Kommentare werden "wie es ist" angegeben und mir ist es egal, wenn Sie mich überprüfen.

, Mit freundlichen Grüßen

DrFunkie

Bad Speller, aber verdammt guter Entwickler. :)

Verwandte Themen