2016-06-07 12 views
11

Quando si esegue dotnet run sull'applicazione MVC6, richiede molto tempo alla prima richiesta, ma ovviamente funziona correttamente. Ho cercato di trovare risposte in google ma è impossibile perché tutto ciò che ottengo sono articoli su IIS che non sto usando affatto. In effetti eseguo il codice su Ubuntu.È possibile pre-riscaldare l'app?

E 'possibile preriscaldare lo dotnet run così la prima richiesta sarà veloce come il secondo?

+4

Che dire fare la prima richiesta, subito dopo il riavvio, con curl? – Evk

+0

Il mio attuale script di distribuzione lo sta facendo, ma non è quello che voglio. – sed

+1

ci sono due ragioni per cui l'applicazione è lenta quando si utilizza dotnet run - 1) compilation dell'applicazione 2) visualizza la compilazione. 'dotnet run' controlla sempre se l'applicazione è cambiata e se lo ha fatto la ricompilerà (di default per ogni framework di destinazione). Se questo è per l'esecuzione dell'applicazione in produzione, non utilizzare dotnet run ma pubblicare l'applicazione ed eseguirla direttamente. Se questo è durante lo sviluppo, assicurati di compilare solo per il framework su cui esegui l'applicazione. Le viste sono compilate in fase di runtime. Potrebbe essere possibile precompilare le visualizzazioni ma non sono sicuro al 100%. – Pawel

risposta

1

Alcuni suggerimenti:

  1. utilizzare la build di rilascio in modo che il codice è ottimizzato per l'uso in produzione, piuttosto che di debug (dotnet run --configuration Release)
  2. avviare la prima connessione da soli, quindi tutte le successive richieste dei vostri clienti sono " caldo"
  3. compilazione utilizzando il flag --native, poi ospitare i risultati a ulteriore beneficio da ottimizzazione delle prestazioni

Infine (e questo punto è pura speculazione), è possibile esaminare l'esecuzione del proprio sito Web pubblicato in un host di server Web di produzione (ad es. Apache o IIS) piuttosto che dal cli dotnet. Questo potrebbe fornire miglioramenti delle prestazioni, ma offrirebbe sicuramente funzionalità "di riscaldamento" che non sono presenti nella CLI (so che IIS ha un'opzione Always-On).

+0

Se lo eseguo in Apache o Nginx, sarà solo un proxy inverso quindi non sarà diverso da CLI. Oppure .NET ha già l'implementazione di cgi? – sed

+0

corretto. È più il caso che questi server sono più ricchi di funzionalità, come iis è sempre in modalità. Inoltre, è possibile eseguire una server farm con più istanze proxy, quindi aggiornarle singolarmente e abilitarle solo quando sono calde. – tommed