Domanda

Sto sviluppando un sito Web (relativamente piccolo) in ASP.Net 2.0.Utilizzo nAnt anche per eseguire alcune semplici modifiche al mio progetto prima di consegnare gli eseguibili.Allo stato attuale il sito è "precompilato" utilizzando

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

Ho notato che dopo il riavvio del pool IIS (dopo un arresto per inattività o un riciclo), l'applicazione impiega fino a 20 secondi prima di tornare online (e viene raggiunto Application_start).

Non ho lo stesso problema quando eseguo il debug direttamente in Visual Studio (ci vogliono 2 secondi per iniziare), quindi mi chiedo se aspnet_compiler sia davvero una buona idea.

Non sono riuscito a trovare molto su MSDN.Come compilate i vostri siti web per la produzione?

È stato utile?

Soluzione

Assicurati che:

  1. Stai utilizzando un progetto di applicazione Web anziché un progetto di sito Web, ciò risulterà in un file binario precompilato per il tuo codice dietro
  2. Hai disattivato la generazione del codice di debug nel file web.config - immagino che se questo è diverso da quando hai utilizzato aspnet_compiler il codice potrebbe essere ricompilato

Se li hai provati, potresti provare a eseguire ngen sul tuo assembly risparmiando così il tempo JIT?

Altri suggerimenti

Per la massima reattività, non consentire la chiusura dell'app.

Il primo metodo è assicurarsi che sia incredibilmente popolare in modo che ci sia sempre qualcuno che lo usi.

In alternativa, è possibile utilizzare una piccola pagina keep-alive da qualche altra parte come attività pianificata per mantenere il tuo sito "attivo".

Se il tuo sito web è compilato come aggiornabile, vedrai un mucchio di file .ASPX nella tua directory virtuale.Questi devono essere compilati all'avvio.In questo modo puoi entrare e modificare l'interfaccia utente web stessa.Questa è l'impostazione predefinita sia per i siti Web che per le applicazioni Web.

Assicurati che sia impostato in web.config <compilation debug=false>.Nel mio caso, ho anche un file batch che emette richieste Ottieni per tutte le pagine principali prima di consegnarle agli utenti (simulazione di caricamento della pagina).

La chiave è assicurarsi che il pool di applicazioni IIS non si chiuda mai.Qui è dove è effettivamente ospitato il codice.Imposta il "Timeout di inattività" (in Impostazioni avanzate) su un valore molto alto, come 1440 minuti (24 ore) per assicurarti che non si spenga finché qualcuno visita il tuo sito una volta al giorno.

Avrai comunque il tempo JIT ogni volta che distribuisci un nuovo codice o se questo periodo di timeout di inattività viene superato senza traffico.

Configurazione del timeout di inattività di IIS 7.x

@Simone:

  • Il progetto è un'applicazione Web.I siti web sono quindi più lenti ad avviarsi (non avevo idea che avesse un'incidenza, a parte la diversa organizzazione del codice)?
  • Ho controllato, e mentre modifico web.config dopo che viene chiamato aspnet_compiler, non tocco il valore di debug (controllerò comunque che il sito Web non sia più veloce all'avvio se non tocco web.config, solo per fare in modo che Sicuro)

(E darò sicuramente un'occhiata a ngen, non ero a conoscenza di quello strumento.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top