Recommandé: faites bon usage de la cartographie URL ASP.NET 2.0 Introduction: le mappage d'URL est une nouvelle fonctionnalité fournie dans ASP.NET 2.0. La technologie de cartographie URL nous aide à cartographier une URL spécifique à une autre URL. Pour aider à comprendre, supposons que vous avez une page appelée HomePage.aspx sur le site pour accéder à la page d'accueil, et tous les utilisateurs l'utilisent également
9.3.5 Cache de donnéesTout d'abord, il est important de noter que bien que le cache de données et le cache d'ensemble d'enregistrements soient utilisés pour améliorer les performances, les deux ne sont pas pertinents. Le cache de données est une zone de stockage de données temporaire qui permet d'utiliser des données dans le cache au lieu de régénérer de nouvelles données. Cela ne s'applique qu'aux données qui ne sont pas fréquemment modifiées mais qui sont accessibles plusieurs fois.
L'un des moyens les plus simples de mettre en cache les données dans ASP est d'utiliser des variables d'application et à l'échelle de la session. Par exemple, supposons qu'il existe des pages Web qui doivent choisir un type de livre. Dans des circonstances normales, un fichier inclue avec les fonctions suivants peut être créé.
<%
Fonction bookTypes ()
Dim rsbooktypes
Sombre strquote
strquote = chr (34)
Définir RSBookTypes = Server.CreateObject (ADODB.RecordSet)
'Obtenez les types de livres
RSBookTypes.Open USP_BookTypes, StrConn
Response.Write <Select Name = & Strquote & LstBookType & Strquote &>
Bien que ce ne soit pas RSBookTypes.eof
Response.Write & <opoption> & rsBookTypes (Type) & </opoption>
RSBookTypes.MoVeNext
Se promener
Response.Write & </lect>
rsbooktypes.close
Définir RSBookTypes = Rien
Fonction finale
%>
Il s'agit simplement d'appeler une procédure stockée pour obtenir le type de livre tout en créant une liste de sélection. L'inconvénient du code ci-dessus est que chaque fois que la fonction est appelée, la base de données doit être accessible. Par conséquent, ré-modifiez cette fonction.
<%
Fonction bookTypes ()
Dim rsbooktypes
Sombre strquote
Dim Strlist
'Voyez si la liste est dans le cache
StrList = Application (BookTypes)
Si strList = alors
'Pas mis en cache, alors construisez la liste et mettez-le en cache
strquote = chr (34)
Définir RSBookTypes = Server.CreateObject (ADODB.RecordSet)
'Obtenez les types de livres
RSBookTypes.Open USP_BookTypes, StrConn
strList = <select name = & strQuote & lstBookType & Strquote &>
Bien que ce ne soit pas RSBookTypes.eof
strlist = strlist & <opoption> & rsbooktypes (type) & </opoption>
RSBookTypes.MoVeNext
Se promener
strlist = strlist & </lect>
rsbooktypes.close
Définir RSBookTypes = Rien
'Vérifiez la liste
Application (bookTypes) = strList
Terminer si
BookTypes = Strlist
Fonction finale
%>
Ce code n'ouvre pas seulement l'ensemble d'enregistrements, il vérifie si la valeur de la variable d'application BookType est vide. S'il n'est pas vide, le contenu de la variable est utilisé. Si vide, l'ensemble des enregistrements est ouvert comme auparavant. De toute évidence, une fois que la première personne exécute cette routine, les données sont mises en cache, ce n'est donc utile que pour les données qui ne sont pas souvent modifiées.
Si vous souhaitez mettre en cache des données sur une base utilisateur, vous pouvez utiliser des variables dans la portée de la session, mais vous devez noter que la session a une date d'expiration. Après l'expiration, la variable de couche de session sera annulée avec la session et le code peut résilier l'exécution.
En utilisant l'outil de contrainte d'application Web (WAS), les résultats de l'analyse dans le tableau 9-4 ont été obtenus:
Tableau 9-4 Résultats de l'analyse obtenus à l'aide d'outils était des outils
méthode
Clicks de page
Pas de cache
190
Prendre un cache
11000
Il est évident que les performances se sont améliorées. Mais n'utilisez pas la méthode ci-dessus pour tout cache. Après tout, cette approche ne s'applique qu'aux données formatées pour l'affichage. De plus, considérez que si le serveur Web ne sert qu'une personne spécifique, il ne s'agit guère une utilisation typique du serveur Web. L'utilisation vous permet de simuler plusieurs utilisateurs sur un seul serveur, ce qui vous permet de tester votre application de manière plus réaliste.
En simulant un certain nombre d'utilisateurs, l'outil de stress d'application Web peut tester la tolérance des pages Web. L'outil a une interface graphique simple qui est très facile à utiliser. Plus d'informations peuvent être obtenues à partir de http://homer.rte.microsoft.com/ ou télécharger l'outil.
Objets de cache
Que dois-je faire si je veux mettre en cache des données non formatées? Peut-il être utilisé de différentes manières à différents endroits? Bien sûr, vous pouvez également le faire avec des variables d'application ou de session. Considérez le titre du livre. Vous voudrez peut-être utiliser ce titre en plusieurs pages, peut-être afficher tous les titres dans une seule table ou les afficher dans une zone de liste parmi lesquels les utilisateurs peuvent choisir, etc. Vous pourriez penser à mettre en cache l'ensemble d'enregistrements lui-même sans avoir à mettre en cache du texte HTML avec des balises.
Les objets peuvent être mis en cache dans les variables d'application ou de session, mais il y a deux principaux problèmes à prêter attention:
· Les objets stockés dans les variables d'application doivent prendre en charge les threads libres, ils doivent donc être des objets de thread libre ou des objets à double thread. Cela signifie que les composants créés par VB ne peuvent pas être mis en cache dans la variable d'application.
· Le stockage d'un objet de thread d'unité dans l'état de session signifie que le thread qui a créé l'objet est le seul thread qui permet d'y accéder. Par conséquent, IIS ne peut pas mieux compléter la gestion du thread, car toute page essayant d'accéder à cet objet doit attendre que le fil d'origine serve la page. Cela tuera toute chance d'étendre la demande.
Pour discuter des problèmes de filetage, voir le chapitre 15.
Par défaut, ADO est chargé en tant qu'objet de thread d'unité, principalement parce que certains fournisseurs de base de données OLE ne sont pas en filetage. Il existe un fichier de registre dans le répertoire d'installation ADO qui convertit ADO en un modèle à deux thread, permettant ainsi à des objets ADO d'être stockés en toute sécurité dans les objets d'application et de session.
Vous pourriez penser que tous les problèmes sont résolus et qu'une augmentation de vitesse significative peut être réalisée en utilisant différents types d'objets, mais ce n'est pas nécessairement le cas. Beaucoup ont réalisé que, comme la connexion à une base de données est une opération relativement coûteuse, la mise en cache d'objets de connexion peut gagner beaucoup de temps lors de la connexion à nouveau. C'est vrai, mais la mise en cache d'un objet de connexion signifie que la connexion ne sera jamais fermée, donc le pool de cache de connexion est relativement inefficace. Une idée qui se connecte aux pools de cache est en fait de réduire les ressources utilisées sur le serveur, et la mise en cache d'objets à l'état ASP ne peut évidemment pas réduire l'utilisation des ressources. En fait, ils sont également augmentés car chaque cache d'objet reprend les ressources du serveur, ce qui réduira considérablement l'efficacité du serveur Web pour un site occupé.
Donc, les objets de connexion ne doivent pas être stockés, mais qu'en est-il des objets de coffre-fort, en particulier des ensembles d'enregistrements déconnectés? En supposant que ADO soit passé d'un fil d'unité à un double fil, il n'y a aucune raison de ne pas le faire, tant que vous savez exactement ce que vous faites. Ne pensez pas que cela améliorera automatiquement les performances des pages ASP. Chaque ensemble d'enregistrements en cache prend les ressources du serveur en termes de mémoire et de gestion ASP, alors ne cachez pas de grands ensembles d'enregistrements.
Partager: ASP Lire et écrire un tableau d'enregistrement Un exemple: ce qui suit est le contenu référencé: <% dim ReadComputerName set ReadComputerName = CreateObject (wscript.shell) Dim ComputerName, Reg