Le défi de l'hébergement Web
Il ne faut pas oublier qu'aucune des options de configuration de la machine n'est disponible si vous êtes hébergé sur un serveur partagé, comme c'est le cas pour beaucoup d'entre nous (petites entreprises et particuliers).
Surcharge de l'ASP.NET MVC
Mon site prend au moins 30 secondes alors qu'il n'a pas été consulté depuis plus de 20 minutes (et que l'application web a été arrêtée). C'est terrible.
Une autre façon de tester les performances
Il y a un autre moyen de tester si c'est le démarrage de votre ASP.NET MVC ou quelque chose d'autre. Déposez une page HTML normale sur votre site où vous pouvez l'atteindre directement.
Si le problème est lié au démarrage d'ASP.NET MVC, la page HTML s'affiche presque immédiatement, même si l'application Web n'a pas été lancée.
C'est ainsi que j'ai compris que le problème se situait au niveau du démarrage d'ASP.NET MVC. Je chargeais une page HTML à tout moment et elle se chargeait très rapidement. Puis, après avoir cliqué sur cette page HTML, je cliquais sur l'une de mes URL ASP.NET MVC et j'obtenais le message Chrome "Waiting for raddev.us...".
Un autre test avec le script utile
Après cela, j'ai écrit un LINQPad (consultez la rubrique http://linqpad.net pour plus) script qui frappait mon site web toutes les 8 minutes (moins que le temps de déchargement de l'application -- qui devrait être de 20 minutes) et je l'ai laissé tourner pendant des heures.
Pendant que le script était en cours d'exécution, j'ai visité mon site web et à chaque fois, mon site s'est affiché très rapidement. Cela me donne une bonne idée que la lenteur que j'éprouvais était probablement due aux temps de démarrage d'ASP.NET MVC.
Obtenez LinqPad et vous pouvez exécuter le script suivant - changez simplement l'URL par la vôtre et laissez-le s'exécuter et vous pourrez tester cela facilement. Bonne chance.
NOTE : Dans LinqPad, vous devez appuyer sur F4 et ajoutez une référence à System.Net pour ajouter la bibliothèque qui récupérera votre page.
AUSSI : assurez-vous de modifier la variable String URL pour qu'elle pointe vers une URL qui chargera une route de votre site ASP.NET MVC afin que le moteur fonctionne.
System.Timers.Timer webKeepAlive = new System.Timers.Timer();
Int64 counter = 0;
void Main()
{
webKeepAlive.Interval = 5000;
webKeepAlive.Elapsed += WebKeepAlive_Elapsed;
webKeepAlive.Start();
}
private void WebKeepAlive_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
webKeepAlive.Stop();
try
{
// ONLY the first time it retrieves the content it will print the string
String finalHtml = GetWebContent();
if (counter < 1)
{
Console.WriteLine(finalHtml);
}
counter++;
}
finally
{
webKeepAlive.Interval = 480000; // every 8 minutes
webKeepAlive.Start();
}
}
public String GetWebContent()
{
try
{
String URL = "http://YOURURL.COM";
WebRequest request = WebRequest.Create(URL);
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();
string html = String.Empty;
using (StreamReader sr = new StreamReader(data))
{
html = sr.ReadToEnd();
}
Console.WriteLine (String.Format("{0} : success",DateTime.Now));
return html;
}
catch (Exception ex)
{
Console.WriteLine (String.Format("{0} -- GetWebContent() : {1}",DateTime.Now,ex.Message));
return "fail";
}
}