1. Qu'est-ce que la mise en cache ASP/pourquoi devrait-elle être mise en cache ? Lorsque votre site Web est initialement créé à l'aide de la technologie ASP, vous ressentirez peut-être la commodité apportée par la technologie de page Web dynamique ASP, ainsi que la liberté de modification et le contrôle http gratuit. Cependant, à mesure que le nombre de visites augmente, vous constaterez certainement que la vitesse d'accès à votre site devient de plus en plus lente et qu'IIS redémarre de plus en plus fréquemment. Ensuite, vous devez vouloir optimiser asp, comme remplacer la base de données par de meilleures performances, créer des index, écrire des procédures stockées, etc. Certaines de ces mesures n’exigent pas une pression accrue sur les coûts, tandis que d’autres nécessitent une pression importante sur les coûts (comme le regroupement de l’accès à SQL), et l’effet n’est pas nécessairement certain.
Face à la pression de l'accès au Web, je pense que le moyen le plus économique consiste à utiliser la technologie d'optimisation du cache pour alléger la pression des services Web.
L’augmentation du trafic Web signifie souvent une croissance rapide de la demande pour les ressources suivantes :
1. L'augmentation du trafic de la carte réseau nécessite davantage de CPU pour traiter le trafic réseau et les threads d'E/S réseau.
2. La nécessité d'ouvrir/fermer les connexions aux bases de données plus fréquemment (si la technologie des bases de données est utilisée - généralement ASP utilise des bases de données comme stockage de données), le nombre d'éléments qui consomment sérieusement des ressources et les blocages causés par des transactions en concurrence pour les ressources augmenteront l'I/du réseau. O Ou consommation CPU.
3. Si une session est utilisée, IIS consommera plus de mémoire afin de maintenir l'état, et la consommation de mémoire peut entraîner une mémoire physique insuffisante, provoquant des échanges fréquents entre la mémoire physique et la mémoire auxiliaire, provoquant une pause de l'exécution du code et un blocage de la réponse Web. .
4. En raison du manque de réponse rapide à l'accès, cela entraînera un échec d'accès aux pages Web, obligeant les utilisateurs à actualiser, exacerbant ainsi la demande de ressources telles que le processeur et la mémoire.
En fait, compte tenu des applications Web courantes, l’exécution de code dynamique est souvent inutile.
2. La classification du cache ASP peut être résumée sans autorisation. Le cache ASP peut être divisé en deux catégories :
1. Mise en cache de fichiers La mise en cache de fichiers est basée sur un jugement logique selon lequel l'exécution spécifique d'un certain ASP ne changera pas de manière significative au cours d'une période de temps. Par conséquent, le contenu est stocké sous forme de HTML statique, puis de fichier. La technologie de redirection Web est utilisée pour permettre aux clients d'accéder de bout en bout aux fichiers statiques afin de réduire le besoin en CPU, en ressources de base de données, etc. Il existe de nombreuses applications de ce type. Par exemple, de nombreux forums régénèrent l'intégralité du message dans un fichier statique lors de la réponse à un message, puis le redirigent, comme le forum donews.com. Il y a aussi un effet secondaire (avantage) d'être statique : il peut être facilement indexé par les moteurs de recherche tels que Google. Certains systèmes de diffusion de nouvelles ont adopté cette technologie.
2. Mise en cache des fragments de fichiers. La mise en cache des fichiers est également basée sur un jugement logique. Une certaine partie des données (généralement obtenue en interrogeant une base de données de grande capacité qui consomme des ressources) ne changera pas dans un certain laps de temps. nous pouvons stocker ces données sous forme de fichiers, si nécessaire, les données peuvent être obtenues en lisant des fichiers pour éviter d'alourdir la charge de la base de données. Par exemple, nous stockons généralement certaines données au format XML, puis utilisons C'est ainsi que le forum CSDN est géré.
3. Cache mémoire principal De plus, vous pouvez également envisager la mise en cache en mémoire, le stockage du contenu qui nécessite une réponse rapide en mémoire, et une fois l'accès requis, il sera immédiatement transféré depuis le stockage rapide. Si un très grand nombre de besoins d'accès sont concentrés sur quelques petites pages ou si la mémoire principale est suffisamment grande, je pense que l'utilisation de la mise en cache de la mémoire principale peut certainement améliorer considérablement les performances d'accès au Web.
3. Comment implémenter/utiliser le cache Pour implémenter le cache, vous devez prendre en compte les problèmes suivants :
1. Quelles pages ne changeront pas dans un court laps de temps ?
Analysez votre propre site, il existe de nombreuses pages de ce type. Par exemple, un site Web comporte généralement des colonnes d'actualités et d'informations. Ces colonnes sont généralement publiées par les responsables du site à une certaine heure de la journée, et les pages sont rarement modifiées par la suite. Ces pages conviennent alors à la mise en cache de fichiers statiques. En fait, c'est ce que fait ce que l'on appelle le système de diffusion de nouvelles, vous pouvez donc également vous référer aux idées de ces systèmes pour transformer vos pages ASP dynamiques originales.
2. Ces pages sont générées en utilisant la même logique pour tous les visiteurs (c'est-à-dire que les visiteurs ne sont pas distingués).
Outre les colonnes telles que les actualités et les informations où tous les visiteurs voient la même interface, les applications gourmandes en ressources telles que les forums peuvent généralement être conçues pour générer une logique unifiée (un même message sera consulté de la même manière par trois personnes et trois personnes). de telles pages d'application, nous pouvons également y parvenir en utilisant la mise en cache statique. Vous pouvez également envisager de fragmenter les données et d'utiliser une technologie de script pour les traiter au-delà des capacités de traitement du serveur, c'est-à-dire du navigateur client.
3. Les coûts et les gains liés à l'utilisation de la mise en cache.
L'essentiel est "l'espace pour le temps (de réponse)". Utilisez la technologie de mise en cache pour prétraiter le contenu qui sera fréquemment nécessaire à l'avenir afin d'améliorer la réactivité du serveur Web et, plus important encore, de gagner la faveur des visiteurs.
Le prix à payer est que la demande d'espace Web augmente, et en même temps, l'effet d'accès peut être affecté.
Mais je pense qu’une bonne mise en cache présente plus d’avantages que d’inconvénients.
4. Ces endroits ne conviennent pas à la mise en cache des pages de requêtes dynamiques. Le contenu des requêtes de chacun est différent, les résultats d'affichage sont donc différents, il est donc impossible de mettre en cache les résultats de la requête. Par conséquent, la mise en cache est plus compliquée et le taux d'utilisation du cache est faible. provoquant des problèmes de gestion. Le coût est élevé (en supposant que vous mettiez en cache 1 000 mots-clés de requête, la gestion de la correspondance entre ces mots-clés et le cache est également gênante).
4. Exemple d'analyse Supposons que la présentation originale d'un forum de suggestions est la suivante :
Sous le répertoire racine :
page d'accueil default.asp, généralement faits saillants, recommandations, etc.
listBorad.asp Ce fichier liste les noms et introductions de toutes les colonnes. S'il porte le paramètre MainBID, cela signifie que les colonnes sous la section doivent être listées.
listThread.asp Si ce fichier ne contient aucun paramètre, cela signifie répertorier toutes les publications, et s'il contient MainBID, cela signifie répertorier toutes les publications dans un certain bloc. Si subBID est porté, cela signifie répertorier les publications dans des colonnes spécifiques. Si le paramètre page est porté, les sujets sont répertoriés en pages.
ViewThread.asp répertorie le contenu d'une publication. Nous supposons que la publication est affichée sous forme de commentaire et que tous les commentaires sont répertoriés à la fin. Le paramètre ID est la publication à afficher.
Reply.asp répond à un certain message et porte le paramètre Id pour répondre à un certain message. Le reste ne sera pas discuté pour le moment.
D'après ce qui précède, nous pouvons voir que si tout est fait en utilisant l'ASP/PHP d'origine, alors l'exécution de presque tous les fichiers asp nécessite des opérations de base de données, des requêtes fréquentes et des requêtes multi-tables. Il faut savoir qu'interroger la base de données entraînera à terme une diminution des performances et de la vitesse de réponse, ce qui affectera la lenteur de la navigation des visiteurs et n'est pas propice à la qualité du Web. Ce qui est plus important, c'est que pour deux personnes, A et B, si elles accèdent à ViewThread.asp et autres, si l'ID est le même, elles verront souvent le même contenu (le code HTML reçu par leur navigateur est presque le même). pareil), mais pour ce "Même contenu", le serveur doit ouvrir les connexions à la base de données, les requêtes, lire les enregistrements, afficher, fermer les enregistrements et les connexions à la base de données. . . . Si davantage de personnes accèdent aux opérations suivantes qui consomment des ressources du serveur, le résultat final sera que ces personnes consommeront davantage de ressources du serveur. En fait, ces efforts répétés pour le « même contenu » peuvent être évités en utilisant la technologie de mise en cache pour l’optimisation. Par exemple:
Après avoir soumis le contenu dans réponse.asp, nous appelons immédiatement la fonction statique et stockons l'intégralité du contenu de la publication sous forme de fichier HTML statique tel que viewThread_xxxx.htm. Dans des circonstances normales, lors de l'accès à viewThread.asp?ID=xxxx, le système redirige automatiquement. au fichier statique correspondant viewThreadxxxx.htm. De cette façon, lorsqu'une publication n'a pas la dernière version, il s'agira toujours d'un contenu statique fourni aux téléspectateurs ; une fois qu'il y aura une nouvelle soumission, elle sera mise à jour dans le fichier statique. De cette manière, de nombreuses opérations de base de données seront enregistrées. et la réponse sera grandement améliorée.
listBorad.asp peut également être implémenté de manière statique. Nous pouvons analyser les paramètres qu'il peut contenir, définir le nom du fichier cache sur listBoard_xx.htm et mettre à jour listBoard_xxx.htm lors de l'ajout de nouvelles colonnes. listThread.asp est similaire, sauf que comme il a plus de paramètres, il y aura beaucoup de fichiers cache. Si vous souhaitez mettre en cache listThread.asp? subBID=xxx&page=2, alors le fichier statique correspondant est listThread_xxx_p2.htm. Il en va de même pour default.asp.
Alors, comment savoir quand mettre à jour ? Quand sera-t-il mis à jour ?
En discutant de listThread.asp ? subBID=xxx&page=2, nous extrayons le subID et la page lors de l'exécution de listThread.asp, puis détectons si listThread_xxx_p2.htm existe. S'il n'existe pas, appelons la fonction de génération statique pour générer le fichier, et enfin redirigeons. ici des fichiers statiques. Notez que l'absence ici signifie qu'il y a du nouveau contenu qui doit être mis à jour.
Alors comment faire pour que le fichier n'existe pas ? supprimer. Lorsque nous publions un nouveau message, supprimons un message ou déplaçons un message, nous pouvons supprimer tous les fichiers statiques comme listThread_xxx_p2.htm. Cela vous indique quand mettre en cache.
Il reste maintenant une question : comment générer des fichiers statiques ?
Notons que le « même contenu » que nous avons mentionné précédemment. Nous pouvons faire une copie de default.asp, listThread.asp, etc. avant la transformation, nommée default_d.asp, listThread_2.asp, et dans le même répertoire (théoriquement listThtrad.asp?subID=123 est le même que LISTtHREAD_D.ASP ? Le résultat de l'accès de SUBID=123 sera le même contenu), donc dans la logique qui doit générer des fichiers statiques, nous appelons la copie avant transformation via une demande d'accès WEB, récupérons le code html et le stockons en tant que fichier statique. Cette requête Web équivaut en fait au fait que le serveur lui-même visualise le code HTML qui sera généré avant qu'un véritable navigateur n'accède au contenu statique, puis renvoie ces codes et les stocke sous forme de fichiers statiques à l'aide de la fonction d'opération de fichier. De cette façon, le fichier cache est créé avant le véritable visualiseur.
Une telle solution ne touchera guère à la mise en page d'origine et ne provoquera presque jamais d'erreurs telles que 404 dues à une modification. Deuxièmement, les fichiers statiques aideront également votre site à être facilement indexé par les moteurs de recherche tels que Google. Pourquoi pas?
Enfin, pour rappel, via l'accès web, dans l'environnement de programmation ASP, de nombreuses personnes utilisent le composant xmlHTTP pour y accéder, ce qui va poser de nombreux problèmes. xmlhttp lui-même mettra en cache les ressources demandées, ce qui fera que le contenu que nous demandons via ce composant ne sera pas le plus récent, provoquant une confusion logique. Par conséquent, vous devez choisir l'objet http du serveur XML ou le composant winhttp pour implémenter les ressources de requête Web.
L'utilisation de la technologie de mise en cache dans ASP peut améliorer considérablement les performances de votre site Web. En fait, ces méthodes de mise en œuvre sont très simples. Elles expliqueront le fonctionnement de la mise en cache sur le serveur et comment vous pouvez utiliser une méthode appelée technologie de connexion ADO.
Avant de présenter ces technologies, expliquons ce qu’est exactement la technologie de mise en cache ASP.
Le soi-disant cache consiste en fait à ouvrir un espace dans la mémoire pour enregistrer des données. En utilisant le cache, vous n'avez pas besoin d'accéder fréquemment aux données que vous enregistrez sur le disque dur. En utilisant le cache de manière flexible, vous pouvez éviter. la détresse de voir le pauvre disque dur se remplir. Je suis torturé par la lecture des données. Une fois que vous avez exécuté une requête et placé les résultats de la requête dans le cache, vous pouvez accéder rapidement aux données à plusieurs reprises. Et si vous ne mettez pas les données dans le cache, lorsque vous exécutez à nouveau la requête, le serveur passera le processus à les extraire et à les trier à partir de la base de données.
Lorsque les données sont stockées dans le cache, le temps passé lors d'une nouvelle requête est principalement le temps d'afficher les données.
En d’autres termes, nous ne devons pas mettre dans le cache du serveur les données qui doivent changer fréquemment. Nous devons mettre dans le cache les données qui changent moins mais qui nécessitent un accès fréquent.
Nous allons maintenant discuter de la manière dont ASP utilise la technologie de mise en cache côté serveur, puis nous discuterons de la manière dont ASP utilise la technologie de mise en cache côté client.
Lorsque vous disposez d'une grande quantité de données (statiques, c'est-à-dire moins changeantes) qui doivent être affichées au client, vous pouvez envisager d'utiliser la technologie de mise en cache côté serveur. Cette technologie est particulièrement adaptée aux sites Web avec une forte cohérence de style d’affichage (haha, elle n’est pas facile à utiliser pour les sites Web non traditionnels.)
En fait, la méthode de mise en œuvre est très simple. Il suffit de regarder l’exemple simple ci-dessous pour comprendre.
Ceci est un exemple de programme pour afficher les catégories de livres
Fichier DisplayBooks.ASP :
< %@ LANGUE=JavaS
script % >
<html>
<corps>
<form méthode=post>
Classement des livres ; < %= getBooksListBox() % >
<p>
< type d'entrée = soumettre >
<%
fonction getBooksListBox()
{
LivresListBox = Application("LivresListBox")
if (BooksListBox != null) renvoie BooksListBox ;
crlf = String.fromCharCode(13, 10)
BooksListBox = « <select name=Books> » + crlf ;
SQL = « Sélectionnez * FROM Books orDER BY Name » ;
cnnBooks = Server.CreateObject("ADODB.Connection");
cnnBooks.Open("Livres", "Admin","");
rstBooks = cnnBooks.Execute(SQL);
fldBookName = rstBooks("BookName");
tandis que (!rstBooks.EOF){
LivresListBox = LivresListBox + ” <option>” +
fldBookName + "" + crlf;
rstBooks.MoveNext();
}
LivresListeBox = LivresListeBox + ""
Application("BooksListBox") = LivresListBox
retourner BooksListBox ;
}
%>
C'est très simple, en fait, il utilise une technologie d'application très simple, et la différence n'est qu'une phrase :
Application("BooksListBox") = LivresListBox
Vous pouvez le vérifier et vous constaterez que le nombre de requêtes sur le serveur sera considérablement réduit. Cette situation est particulièrement adaptée aux contenus de sites Web qui ne sont pas mis à jour très fréquemment, par exemple, vous ne le mettez à jour qu'une fois par jour (ou pendant une longue période).
Nous aborderons ensuite une technologie de mise en cache côté client. Cette technologie est également appelée technologie de connexion ADO déconnectée (le niveau de traduction est trop faible, pourquoi cela semble-t-il si gênant). Cette technologie est principalement utilisée pour sauvegarder les informations personnelles des utilisateurs, telles que les mots de passe des utilisateurs, les noms de code, etc. Il utilise principalement certaines propriétés d'ADO. Dans le même temps, cela répond également à la question soulevée par certains internautes quant à savoir si les objets ADO peuvent être utilisés dans Applocation. L'explication n'est pas claire, laissez le code parler :
Fichier GLOBAL.ASA :
< !–METADATA TYPE=”TypeLib” FILE=”C:Program FilesCommon
Fichierssystèmeadomsado15.dll”–>
< SCRIPT LANGUAGE=VBScript RUNAT=”Serveur” >
Sous-application_OnStart
SQL = "Sélectionnez le nom d'utilisateur, le mot de passe FROM UserInfo"
cnnUsers = « DSN = Utilisateur »
Définir rsUsers = Server.CreateObject("ADODB.Recordset")
'Notez que les deux phrases suivantes sont utilisées pour implémenter la technologie ADO appelée déconnexion disponible.
rsCustomers.CursorLocation = adUseClient
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly
' Déconnecter le RecordSet de la base de données
rsCustomers.ActiveConnection = Rien
Définir Application("rsCustomers") = rsCustomers
Fin du sous-marin
FichierUtilisateurs.ASP
<%
'La méthode Clone permet à chaque utilisateur d'avoir sa propre collection RecordSet
Définissez vos utilisateurs = Application("rsUsers").Clone
Définir UserName = yourUsers("UserName")
Définir le mot de passe = vos utilisateurs ("Mot de passe")
Faites jusqu'à ce que vos utilisateurs.EOF
%>
Nom d'utilisateur : < %= UserName % > Mot de passe utilisateur : < %= Mot de passe % >
<%
vosUtilisateurs.MoveNext
Boucle
%>