2009-06-15 1 views
11

Dove lavoro, facciamo un numero molto grande di app ASP.NET molto piccole, ed è successo un paio di volte che i siti sono stati distribuiti in formato precompilato, e l'app deve essere cambiata, ma la versione del codice disponibile nel controllo del codice sorgente non è aggiornato e lo sviluppatore non è disponibile. La dll dell'app deve essere decompilata e riorganizzata insieme.Devo precompilare i siti ASP.NET 2.0 prima della distribuzione o no?

Idealmente, non succederebbe mai che uno sviluppatore invii un cambiamento attraverso test e produzione e salti il ​​controllo del cambiamento, da allora abbiamo apportato modifiche alle nostre politiche per evitare che ciò accada, ma mi chiedo se il sovraccarico di compilazione di un sito sul server ogni volta che il pool di app si riavvia è un problema abbastanza grande che dovremmo evitare di caricare il nostro codice direttamente sul server. Sarebbe più semplice controllare la versione nel controllo sorgente rispetto alla versione live effettiva se potessimo scaricare la fonte live.

Quali sono i vantaggi della precompilazione VS di caricare i file cs direttamente sul server e di averli compilati lì?

+9

Se gli sviluppatori apportano modifiche dirette al codice di produzione, ignorando il controllo del codice sorgente e il processo di rilascio standard, si hanno problemi molto più grandi che preoccuparsi della precompilazione. – ahockley

+2

D'accordo, ma sto cercando di apportare miglioramenti dove posso. Avere maggiori problemi organizzativi che non riesco a risolvere non è un motivo per non preoccuparmi di cose che posso influenzare al mio livello. – NetHawk

risposta

0

Dipende dalle dimensioni delle applicazioni e dalla frequenza di utilizzo. Se viene utilizzato regolarmente abbastanza che il pool di applicazioni viene riciclato solo alla fine della giornata, potrebbe essere utile attendere brevemente al primo avvio al mattino. Se viene colpito solo una volta ogni 30 minuti, forzando una ricompilazione ogni volta, può valere la pena precompilare.

Ovviamente, se si tratta di un'app molto grande che richiede un po 'di tempo per essere compilata al primo avvio, mi piacerebbe andare alla precompilazione, soprattutto se non viene utilizzata costantemente.

+1

Ho un numero di app ASP.net sulla intranet locale. Tutti loro sono distribuiti come codice sorgente. Alcuni di questi sono usati raramente. Ma dopo la prima compilazione, sembrano sempre venire molto rapidamente. Hai qualche fonte per le tue informazioni su un timeout della cache di 30 minuti? La mia esperienza sembra indicare il contrario. – recursive

+0

Il pool di applicazioni viene riciclato dopo 20 minuti, quindi picchiarlo subito dopo significa ottenere il risultato di avvio/compilazione –

+0

Le app non sono molto grandi, in realtà solo poche pagine e assiemi. Ho provato ad accedere ad alcuni sul server che non sono stati precompilati e appena implementati. Il tempo necessario per accedere a quelli era evidente (lo stavo cercando), ma non così male. Molti di loro non vedono molto accesso. – NetHawk

0

Il vantaggio principale è nella compilazione delle prestazioni sul server web. Protegge anche il tuo codice, perché è più difficile leggere il codice dall'assemblaggio :-)

+0

Proteggi il tuo codice da chi? Il cliente? –

+2

In realtà, Ishtar, è quasi banale decompilare un assembly .NET con Reflector. Dal momento che il server web non fornisce file che dovrebbero essere protetti in ASP.NET, come i file .cs e la tua configurazione web, è davvero un grande vantaggio? Sono d'accordo che la prestazione è la preoccupazione più popolare. Grazie per la tua risposta. – NetHawk

+0

Ogni programma può essere decompilato .. Ma è "più difficile" leggerlo. Se hai pubblicato progetti non compilati, chiunque può leggere direttamente un codice modificato. –

1

Da un punto di vista di semplice utilizzo, mi piace semplicemente caricare i file di origine sul server e dimenticare la pre-compilazione.

Questo è quello che faccio per tutti i siti che gestisco, anche quelli grandi. Cerco di prendere l'abitudine di colpire i pezzi più importanti dell'applicazione per assicurarmi che tutto funzioni (e per compilarli mentre ci sono).

Ed ecco un altro pensiero. Se il sito è pubblico puoi lasciare lo w3c link checker libero su di esso. Questo avrà l'effetto di compilare ogni pagina che colpisce. Ed è una cosa carina da fare comunque per assicurarti di non avere collegamenti spezzati.

In poche parole, suppongo che questi controlli di routine eliminino quasi il problema della lenta compilazione della prima visita dagli utenti. E poiché è una buona routine da seguire in ogni caso, ha funzionato bene per me.

+0

Grazie, Steve. Ogni pagina è compilata separatamente? Sembra che il successo della performance sia tutto alla prima richiesta. – NetHawk

+0

I file aspx sono compilati separatamente. Nella configurazione tipica, i code-behind non lo sono da quando sono stati inseriti in una DLL. –

0

a caricare file senza precompilazione: in questo modo, dato che il mio codice è molto buggy, posso correggere con Notepad ++ direttamente dal server

Inoltre, Visual Web Developer 2008 (quello libero) non ha l'opzione di compilazione :-P

8

Non sono d'accordo con la maggior parte delle risposte fornite a questo punto. Ci sono molti vantaggi nel precompilare la pubblicazione di file ad-hoc, non ultimo il fatto che il codice negli ambienti di produzione e testing rimane più o meno sincronizzato. La pre-compilazione rende certo che il codice che hai testato è il codice che va alla produzione ogni ora.

Il problema che si sta eseguendo non è uno di compilazione pre-compilazione rispetto alla prima esecuzione. Invece deriva dal tipo di controllo sorgente che si sta utilizzando. Se dovessi indovinare (e lo faccio), direi che stai usando Visual SourceSafe.Se si dovesse passare a un sistema di controllo del codice sorgente che rendesse banali le diramazioni e le fusioni, è possibile separare il proprio codice nelle filiali stable e development. Le correzioni dei bug si verificano nei rami dev (che vengono quindi uniti al ramo stable una volta convalidati). In questo modo, il codice non testato o comunque non pronto per il primo tempo non finisce sul server di produzione e hai sempre una copia del stable impostato su cui lavorare.

+0

Grazie, Rob. Sto votando questo come un buon contrappunto e in modo provocatorio utile. Questo sembra un buon processo, e il nostro intero sistema qui è davvero ad-hoc. Hai ragione che usiamo SS qui, e mi piacerebbe usare qualcosa di meglio. – NetHawk

2

La prima cosa che viene in mente è:

  1. segreti commerciali Problemi
  2. Problemi di sicurezza
  3. Sloppy Joe Moe il (pigro, vuole Careless e Pitiful essere sviluppatore)
  4. Ad Hoc Hacking the Code è fuori controllo.

    • precompilato codice in modo sicuro ed efficiente gira sul Framework .Net in un formato gestito.
    • Uncompiled Il codice viene distribuito da principianti che non hanno preso il tempo di considerare i numerosi problemi associati a codice non sicuro che funzionano in modo meno efficiente per l'utente finale.

utenti finali sono parti interessate e sono oggetto di responsabilità fiduciarie di uno sviluppatore. Gli sviluppatori dovrebbero approfittare delle sempre nuove opportunità per migliorare l'efficienza dei loro prodotti.

DISCLAIMER: Questi commenti sono dichiarati "come sono" e non me ne frega niente se si effettua il controllo ortografico.

Cordiali saluti,

DrFunkie

Bad Speller, ma dannatamente bene sviluppatore. :)