Fermer

décembre 13, 2018

Construire des backends plus rapides dans ASP.NET Core


Les performances des applications Web sont souvent ignorées jusqu'à ce qu'il soit trop tard. Si les développeurs ne font pas attention, de petites inefficiences peuvent s'accumuler, conduisant à une application Web lente et maladroite. Pour éviter ce destin, la clé est la cohérence – et de toujours rester conscient des goulots d'étranglement liés aux performances. De nombreuses petites améliorations au fil du temps sont moins chères et plus faciles que d'essayer de les intégrer à la fin du projet.

Nous avons récemment examiné comment construire des interfaces plus rapides dans ASP.NET Core . Examinons maintenant l’autre moitié de l’équation – le serveur principal. Optimiser les performances de votre serveur est différent de l'optimisation de votre application Web frontale. La plupart des améliorations des performances frontales se concentrent sur la taille des demandes transmises par le réseau. Les performances dorsales, en revanche, sont davantage axées sur l’obtention efficace des données et le contrôle des réponses. Cet article plonge profondément dans le réglage des performances de l’arrière-plan – nous examinons quelques outils du commerce et des techniques courantes pouvant vous aider.

Measing Speed ​​

Si vous souhaitez améliorer les performances de votre application Web, vous devez d'abord le mesurer. Mesurer les performances peut être une affaire délicate. Les variations causées par d’autres processus en cours de réalisation peuvent rendre difficile l’obtention de chiffres de performances exacts. Les développeurs doivent savoir qu'ils ne doivent jamais faire confiance à un seul numéro de performance. Si vous exécutez plusieurs fois la même opération dans les mêmes conditions, vous obtiendrez une plage suffisamment bonne pour être optimisée. De plus, vous ne pouvez résoudre certains problèmes de performances que lorsque vous exécutez l'application sous le chargement de l'utilisateur.

Pour mesurer les performances, les développeurs souhaiteraient probablement utiliser deux types d'outils différents. Le premier serait un outil de profilage permettant de mesurer les performances individuelles. De nombreux outils peuvent le faire, mais l'un des plus populaires est MiniProfiler . MiniProfiler est simplement un paquet NuGet que vous pouvez intégrer à votre projet d’application Web. Il mesure les performances de différents processus et affiche les informations lorsque vous exécutez votre application. Les heures sont stockées discrètement dans le coin supérieur droit. Vous pouvez les développer pour obtenir une analyse détaillée du temps nécessaire à l'exécution de différents processus sur votre ordinateur. Voici un exemple de la sortie de MiniProfiler:

MiniProfiler établira également le profil des requêtes SQL à partir de Entity Framework, ce qui facilite la recherche de requêtes de longue durée. MiniProfiler marquera également les requêtes SQL en double. Voici un exemple:

Vous pouvez également ajouter des étapes de profilage personnalisées à votre application Web. Si votre processus est long, vous pouvez le décomposer en étapes et en suivre la durée. Dans le code ci-dessous, nous ajoutons une étape de profilage personnalisée à la méthode:

MiniProfiler est un excellent outil pour tester les performances d'une application pendant son utilisation, mais il manque la capacité pour obtenir des données de performance agrégées. Pour cela, vous aurez probablement besoin d'un outil de surveillance des performances des applications (APM). Application Insights et New Relic sont populaires, mais il existe de nombreuses options. Ces outils mesurent les performances globales de votre application Web, déterminent le temps de réponse moyen et signalent les réponses lentes pour vous.

Une fois vos outils de mesure en place, vous pouvez résoudre vos problèmes. Lors de la résolution des problèmes de performances, les développeurs doivent prendre des mesures avant et après chaque intervention. En outre, il est conseillé de ne changer qu'une chose à la fois – si vous modifiez plusieurs facteurs et testez à nouveau, vous ne saurez pas laquelle des interventions (le cas échéant) a fonctionné. Améliorer les performances des applications consiste à exécuter différentes expériences. Mesurer les performances vous indiquera quelles expériences ont fonctionné.

Un autre utilitaire pratique pour mesurer les performances est Telerik Test Studio – une solution d'automatisation des tests appréciée des développeurs et des responsables de l'assurance de la qualité. L'objectif principal étant d'automatiser les tests d'interface utilisateur pour le Web, les ordinateurs de bureau et les appareils mobiles, Test Studio est également très utile pour les tests de charge et de performance. Les développeurs peuvent capturer le trafic HTTP (S) et personnaliser les demandes afin d'évaluer l'impact sur les performances. Les tests Web enregistrés de Test Studio peuvent être réutilisés pour les tests de charge. En résumé, les développeurs doivent utiliser tous les outils disponibles pour mesurer la vitesse et voir comment le réglage des performances peut être utile.

Performance Tips

Il existe de nombreuses techniques de réglage des performances – les meilleures sont basées sur une production réelle. applications. Les conseils de performance ne peuvent cependant pas être appliqués à l'aveuglette: les développeurs doivent mesurer les interventions et s'assurer qu'elles fonctionnent pour l'application donnée. Ce n’est pas parce que quelque chose a fonctionné dans une application que ce sera bon pour une autre application. Décrivons rapidement certaines techniques courantes d'optimisation des performances de votre serveur d'applications backend.

Gestion des bases de données

Les données sont essentielles pour toute application, mais les bases de données peuvent également constituer le goulet d'étranglement des performances le plus courant. Vos requêtes de base de données doivent être efficaces – point final. À l'aide de votre profileur favori, recherchez la requête à exécution lente et essayez de l'exécuter directement sur la base de données. Les développeurs peuvent également utiliser SQL Server Management Studio et extraire le plan d'exécution, si SQL Server est utilisé comme base de données. Si vous utilisez des bases de données relationnelles, vous devez vous assurer que les champs sur lesquels vous effectuez la recherche utilisent les index appropriés. Si nécessaire, vous pouvez ajouter tous les index nécessaires et réessayer. Si votre requête de base de données est complexe, vous pouvez essayer de la simplifier ou de la diviser en plusieurs parties.

Si l'optimisation des requêtes SQL n'est pas votre fort, il existe un raccourci. Dans SQL Server Management Studio, sélectionnez Outils> Assistant de moteur de réglage de base de données. Exécutez votre requête à l'aide de l'outil et il vous indiquera comment le faire fonctionner plus rapidement.

Obtenir les bonnes choses

Ce que votre application Web affiche sur un écran donné devrait avoir une corrélation exacte avec ce que vous extrayez. votre niveau de données – il ne faut pas saisir de données inutiles. Les développeurs doivent se garder de réutiliser des récupérations d'éléments coûteux pour capturer des graphiques entiers d'objets associés pour de petites grilles.

Vous devez également prendre en compte le fait que vos utilisateurs ne liront probablement pas 10 000 articles que vous avez envoyés au client, du moins , pas au même moment. Les développeurs doivent envisager d'extraire des données par lots et d'utiliser la pagination pour limiter la taille des jeux de données récupérés. Interface moderne pour les applications Web telles que Kendo UI ou Telerik UI pour ASP.NET MVC / Core disposent déjà de commandes d'interface utilisateur intelligentes qui fonctionnent de manière transparente avec des blocs de données via la pagination – Les développeurs n'ont pas besoin de réinventer la roue.

Calculs en mémoire cache lente

Le meilleur moyen d'obtenir des données plus rapidement est de ne pas les obtenir du tout. Une utilisation intelligente de la mise en cache peut améliorer radicalement les performances de votre application Web. Dans ASP.NET Core, la mise en cache des données se présente sous deux formes: mise en cache en mémoire et mise en cache distribuée.

La mise en cache en mémoire stocke les données mises en cache sur le serveur. Bien que ce cache soit le plus simple à utiliser, il est également limité à un seul serveur. Si vous exécutez plusieurs serveurs, chacun disposera d'un cache différent.

Le cache distribué utilise un magasin de données pour conserver les données mises en cache. Vous pouvez exécuter autant de serveurs que vous le souhaitez et ils utiliseront tous le même cache de données. Les deux magasins de données les plus courants pour la mise en cache distribuée sont SQL Server et REDIS, deux systèmes assez faciles à configurer.

En raison de son efficacité, certains développeurs voudront tout mettre en cache, ce qui peut être contre-productif. La mise en cache ajoute de la complexité à votre application et l'amélioration des performances n'en vaut pas toujours la peine. Les développeurs doivent limiter la mise en cache aux éléments difficiles à calculer ou lents à modifier. Une autre technique consiste à conserver l'ensemble de la logique de mise en cache des données dans une seule couche de votre application – le fait de lancer des commandes de cache peut rendre la recherche des erreurs potentielles difficile.

Corrigez-le avec Response Compression

Améliorez les performances. de vos applications Web, il est important de minimiser la quantité de données sur le réseau. Cela est particulièrement vrai pour les personnes utilisant votre application Web à partir de leur téléphone. Une façon d'envoyer moins de bits consiste à activer la compression de la réponse. Par défaut, ASP.NET Core gzip plusieurs types de requêtes. Cependant, GZIP n'utilisera pas les réponses couramment utilisées, y compris CSS, JavaScript et JSON. Avant ASP.NET Core, vous deviez écrire un middleware personnalisé pour compresser ces types de réponses. Dans ASP.NET Core, le middleware est intégré … tout ce que vous avez à faire est de l'ajouter à votre fichier Startup.cs comme suit:

Ne créez pas de logjam

Alors que la plupart des infrastructures de journalisation limitent leurs coûts de performances, la journalisation a toujours un coût. Une journalisation excessive peut ralentir votre application pendant les temps de chargement élevés. Une fois en production, les développeurs doivent consigner uniquement ce qui est nécessaire pour prendre en charge la surveillance et le dépannage de routine. Vous devez enregistrer la journalisation détaillée pour les environnements inférieurs, où vous pouvez vous permettre de réduire les coûts liés aux performances. En outre, les niveaux de journalisation sont mieux configurés: si vous devez modifier temporairement votre journalisation pour collecter des données relatives à un problème, vous devriez pouvoir le faire sans avoir à recompiler votre application.

Respectez vos demandes asynchrones

L'utilisation de la programmation asynchrone avec C # Async / Await est un moyen fantastique d'améliorer les performances de votre application, mais vous devez être conscient du fait que ces mots clés n'exécutent pas de commandes en parallèle. Await interrompt l'exécution de votre code – donc, si vous avez plusieurs demandes asynchrones en attente, vos performances individuelles seront identiques à celles que vous auriez exécutées consécutivement.

Cela ne signifie pas que vous ne devriez pas asynciser ce que vous pouvez. , toutefois. Async améliore toujours les performances de votre application, mais uniquement sous charge. En réduisant le nombre de threads en attente, async / wait augmente le débit de votre application.

Si vous souhaitez améliorer les performances individuelles, vous devez utiliser la bibliothèque Task Parallel Library (TPL) . En gérant vos propres tâches, vous pouvez exécuter des tâches en parallèle. Si vous devez effectuer plusieurs appels lents pour une méthode, par exemple un service externe, vous devez envisager de les exécuter en parallèle au lieu d'utiliser async / wait.

L'exemple suivant illustre les deux méthodes. La méthode top utilise le flux async / wait standard et la méthode bottom utilise des objets de tâche. L'exécution des tâches en parallèle utilise davantage de code, mais l'exécution de plusieurs requêtes lentes en parallèle vous fera gagner du temps.

Créez vos applications plus rapidement aujourd'hui

La création d'applications Web performantes est un travail difficile, mais ASP.NET Core propose de nombreux outils et fonctionnalités qui vous aideront. Les développeurs doivent commencer par mesurer les performances avec des outils tels que MiniProfiler et Application Insights. Ensuite, lorsque vous trouvez des goulots d'étranglement, parcourez la liste de contrôle pour voir quelles interventions aident votre application. L’optimisation des performances demande de la patience et des expérimentations – avec des processus simplifiés, vous pouvez activer les commandes appropriées pour améliorer les performances. Des applications Web performantes signifient des utilisateurs ravis et un engagement élevé – Bravo à cela.


Les commentaires sont désactivés en mode Aperçu.




Source link