IIS a une fonctionnalité ennuyeuse pour les sites Web à faible trafic où il recycle les processus de travail inutilisés, ce qui oblige le premier utilisateur sur le site après un certain temps à obtenir un délai extrêmement long (plus de 30 secondes).
J'ai cherché une solution au problème et j'ai trouvé ces solutions potentielles.
A. Utilisez le plugin d'initialisation d'application
B. Utiliser le démarrage automatique avec .NET 4
C. Désactiver le délai d' inactivité de (sous IIS Réinitialiser)
Je me demande laquelle de ces solutions est préférée et, plus important encore, pourquoi y a-t-il autant de solutions au même problème? (Je suppose qu'ils ne le sont pas, et je ne comprends tout simplement pas quelque chose correctement).
Éditer
L'exécution de C semble être suffisante pour garder mon site au chaud, mais j'ai découvert que la véritable racine de la lenteur de mon site est liée à Entity Framework, dont je n'arrive pas à comprendre pourquoi il fait froid. Voir cette question, qui n'a malheureusement pas encore reçu de réponse!
J'ai finalement dû créer un script d' échauffement pour accéder occasionnellement à mon site afin de m'assurer qu'il restait rapide.
Réponses:
Les options A, B et D semblent être dans la même catégorie puisqu'elles n'influencent que l'heure de début initiale, elles font le préchauffage du site Web comme la compilation et le chargement des bibliothèques en mémoire.
L'utilisation de C, la définition du délai d'inactivité, devrait être suffisante pour que les demandes ultérieures au serveur soient servies rapidement (le redémarrage du pool d'applications prend un certain temps - de l'ordre de quelques secondes).
Autant que je sache, le délai d'expiration existe pour économiser la mémoire dont d'autres sites Web fonctionnant en parallèle sur cette machine pourraient avoir besoin. Le prix étant ce temps de chargement lent une fois.
Outre le fait que le pool d'applications est arrêté en cas d'inactivité de l'utilisateur, le pool d'applications sera également recyclé par défaut toutes les 1740 minutes (29 heures).
De technet:
Tant que le recyclage du pool d'applications est activé, cela devrait suffire. Mais si vous voulez vraiment des performances de premier ordre pour la plupart des composants, vous devez également utiliser quelque chose comme le module d'initialisation d'application que vous avez mentionné.
la source
Défi d'hébergement Web
Vous devez vous rappeler qu'aucune des options de configuration de la machine n'est disponible si vous êtes hébergé sur un serveur partagé comme beaucoup d'entre nous (petites entreprises et particuliers) le sont.
Frais généraux ASP.NET MVC
Mon site prend au moins 30 secondes lorsqu'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 existe un autre moyen de tester s'il s'agit de votre démarrage ASP.NET MVC ou de quelque chose d'autre. Déposez une page HTML normale sur votre site où vous pouvez la consulter directement.
Si le problème est lié au démarrage d'ASP.NET MVC, la page HTML s'affichera presque immédiatement même lorsque l'application Web n'a pas été démarrée.
C'est ainsi que j'ai reconnu pour la première fois que le problème était au démarrage d'ASP.NET MVC. J'ai chargé une page HTML à tout moment et elle se chargerait très rapidement. Ensuite, après avoir frappé cette page HTML, j'ai frappé l'une de mes URL ASP.NET MVC et j'obtiens le message Chrome "En attente de raddev.us ..."
Un autre test avec un script utile
Après cela, j'ai écrit un script LINQPad (consultez http://linqpad.net pour plus d'informations) qui frapperait mon site Web toutes les 8 minutes (moins que le temps de déchargement de l'application - ce qui devrait être de 20 minutes) et je laisse il a fonctionné pendant des heures.
Pendant que le script était en cours d'exécution, j'ai frappé mon site Web et chaque fois que mon site est apparu d'une vitesse fulgurante. Cela me donne une bonne idée que la lenteur que je rencontrais é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 et laissez-la s'exécuter et vous pouvez le tester facilement. Bonne chance.
REMARQUE : Dans LinqPad, vous devrez appuyer sur F4 et ajouter une référence à System.Net pour ajouter la bibliothèque qui récupérera votre page.
AUSSI : assurez-vous de modifier la variable URL de chaîne pour qu'elle pointe vers une URL qui chargera une route à partir de votre site ASP.NET MVC afin que le moteur s'exécute.
la source
Ecrire un service / script de ping pour accéder à votre site Web inactif est plutôt une meilleure façon de procéder car vous aurez un contrôle complet. D'autres options que vous avez mentionnées seraient disponibles si vous avez loué une boîte d'hébergement dédiée.
Dans un espace d'hébergement partagé, les scripts de préchauffage sont la meilleure défense de premier niveau (l'auto-assistance est la meilleure aide). Voici un article qui partage une idée sur la façon de le faire à partir de votre propre application Web .
la source
J'utiliserais B car cela, associé au recyclage des processus de travail, signifie qu'il n'y aurait qu'un délai pendant le recyclage. Cela évite le délai normalement associé à l'initialisation en réponse à la première demande après l'inactivité. Vous bénéficiez également des avantages du recyclage.
la source
Une bonne option pour envoyer une requête ping au site selon un calendrier est d'utiliser Microsoft Flow, qui est gratuit jusqu'à 750 "exécutions" par mois. Il est très facile de créer un flux qui frappe votre site toutes les heures pour le garder au chaud. Vous pouvez même contourner leur limite de 750 en créant un flux unique avec des délais séparant plusieurs visites de votre site.
https://flow.microsoft.com
la source
Consultez cet article pour obtenir des conseils sur la façon de résoudre les problèmes de performances. Cela inclut les deux problèmes de performances liés au démarrage, dans la section «démarrage à froid». La plupart de ces éléments importeront quel que soit le type de serveur que vous utilisez, localement ou en production.
http://blogs.msdn.com/b/mcsuksoldev/archive/2011/01/19/common-performance-issues-on-asp-net-web-sites.aspx
la source
J'obtenais un délai constant de 15 secondes sur la première demande après 4 minutes d'inactivité. Mon problème était que mon application utilisait l'authentification intégrée de Windows sur SQL Server et que le profil de service était dans un domaine différent de celui du serveur. Cela a provoqué une authentification inter-domaines d'IIS vers SQL lors de l'initialisation de l'application - et c'était la véritable source de mon retard. J'ai changé pour utiliser une connexion SQL au lieu de l'authentification Windows. Le retard avait immédiatement disparu. J'ai toujours tous les paramètres d'initialisation de l'application en place pour améliorer les performances, mais ils n'ont peut-être pas du tout été nécessaires dans mon cas.
la source