1. Qu’est-ce que la mise en cache ASP/pourquoi devrait-elle être mise en cache ?
Lorsque votre site Web est construit à l'aide de la technologie ASP dès les premiers stades, 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.Classification du cache asp
Pour résumer sans autorisation, le cache asp peut être divisé en deux catégories :
1. Cache de fichiers
La soi-disant 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, de sorte que le contenu est stocké sous forme de HTML statique, puis la technologie de redirection Web est utilisée pour permettre au client d'accéder aux fichiers statiques, pour répondre aux besoins de réduction du processeur, des 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) à être statique : il peut être facilement inclus par les moteurs de recherche tels que Google. Certains systèmes de diffusion de nouvelles ont adopté cette technologie.
2. Cache de fragments de fichiers
Le soi-disant cache de fichiers est également basé sur un jugement logique. Une certaine partie des données (généralement obtenues par une requête de base de données de grande capacité nécessitant des ressources) ne changera pas au cours d'une certaine période de temps, nous pouvons donc stocker ces données dans le fichier. 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. Mémoire cache principale
En outre, vous pouvez également envisager de mettre en cache en mémoire, de stocker en mémoire le contenu qui nécessite une réponse rapide et de le transporter immédiatement depuis le stockage rapide une fois l'accès requis. 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
Les problèmes suivants doivent être pris en compte lors de la mise en œuvre de la mise en cache :
1. Quelles pages ne changeront pas dans un court laps de temps ?
Analysez votre propre site, il existe de nombreuses pages comme celle-ci. 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 en dehors 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 emplacements ne conviennent pas à la mise en cache
Sur la page de requête dynamique, le contenu de la requête de chacun est différent, donc les résultats d'affichage sont différents, il est donc peu probable qu'ils soient mis en cache, la mise en cache est donc plus compliquée et l'utilisation du cache est faible, ce qui entraîne des coûts de gestion élevés (en supposant que vous cachez 1000 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 soit 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 que toutes les publications sont répertoriées, et s'il contient MainBID, cela signifie que toutes les publications d'un certain bloc sont répertoriées. 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 à une publication et porte le paramètre Id pour répondre à une publication.
Les autres ne seront pas évoqués pour l'instant.
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 cela Pour le même contenu, le serveur doit ouvrir les connexions à la base de données, interroger, 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 consomment 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 ?
Nous notons la même chose que nous avons mentionnée précédemment. On peut 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?s Le résultat de l'accès de ubID=123 et LISTtHREAD_D.ASP?SUBID=123 sera le même), 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, obtenons le code html et stockons ce Pour les fichiers statiques. 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 l'utilise côté client.
Technologie de mise en cache.
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 :
< %@ LANGUAGE=JavaScript % >
<html>
<corps>
<form méthode=post>
Classement des livres ; < %= getBooksListBox() % >
<p>
< type d'entrée = soumettre >
<%
fonction getBooksListBox()
{
LivresListBox = Application (BooksListBox)
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, Administrateur,);
rstBooks = cnnBooks.Execute(SQL);
fldBookName = rstBooks(BookName);
tandis que (!rstBooks.EOF){
LivresListBox = LivresListBox + <option> +
fldBookName + + crlf;
rstBooks.MoveNext();
}
LivresListeBox = LivresListeBox +
Application (BooksListBox) = BooksListBox
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) = BooksListBox
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 de savoir si les objets ADO peuvent être utilisés dans Applocation, évoquée par certains internautes. L'explication n'est pas claire, laissez le code parler :
Fichier GLOBAL.ASA :
< !--METADATA TYPE=TypeLib FILE=C:/Program Files/Common
Fichiers/system/ado/msado15.dll-->
< SCRIPT LANGUAGE=VBScript RUNAT=Serveur >
Sous-application_OnStart
SQL = Sélectionnez le nom d'utilisateur, le mot de passe DE 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 l'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
%>
Quant au rôle du cache, je pense que je n'ai pas besoin d'en dire plus. Son rôle est déjà évident, notamment pour les sites Web contenant une très grande quantité d'informations ou des pages de base de données complètes. Il peut faire bon usage des ressources mémoire de l'hébergeur. accélérer l'efficacité de l'exécution d'ASP, réduisant ainsi la charge sur le serveur. Dongwang est le plus remarquable dans cet aspect. Par exemple, sa version actuelle dvbbs7.1.0 a porté l'utilisation du cache à un niveau supérieur. La plupart des opérations à l'avant et à l'arrière sont liées au cache, et maintenant ce qui est utilisé dans Dongwang est le plus remarquable. classe de cache de Lost City Prodigal Son :
<%
Classe Cls_Cache
'==================Mode d'emploi=====================
'Ce module est une création originale de Dongwang Pioneer, auteur : Lost City Prodigal. Si vous utilisez ce type de module, merci de ne pas supprimer cette description. Ce commentaire n'affecte pas la vitesse d'exécution.
'Rôle : Classe de cache et de gestion du cache
'Variable publique : délai d'expiration du temps de rechargement (en minutes), la valeur par défaut est 14 400.
'MaxCount est la valeur maximale des objets mis en cache. Si elle dépasse, les objets moins utilisés seront automatiquement supprimés. La valeur par défaut est 300
'CacheName est le nom total du groupe de cache. La valeur par défaut est Dvbbs. S'il existe plusieurs groupes de cache dans un site, cette valeur doit être modifiée en externe.
'Attribut : Nom définit le nom de l'objet de cache, attribut en écriture seule.
'Attribut : valeur Lire et écrire les données du cache.
'Fonction : ObjIsEmpty() détermine si le cache actuel a expiré.
'Méthode : DelCahe(MyCacheName) supprime manuellement un objet cache, le paramètre est le nom de l'objet cache.
'=========================
Temps de rechargement public, MaxCount, CacheName
LocalCacheName privé, CacheData, DelCount
Sous-classe privée_Initialize()
Reloadtime=14400 'Délai d'expiration (unité : minutes)
CacheName=Dvbbs 'Nom total du groupe de cache
Fin du sous-marin
Sous-SetCache privé (SetName, NewValue)
Application.Lock
Application (SetName) = NouvelleValeur
Application.unLock
Fin du sous-marin
Propriété publique Let Name(ByVal vNewValue) 'Nom de l'objet cache
LocalCacheName=LCase(vNewValue)
Propriété de fin
Propriété publique Let Value(ByVal vNewValue) 'Lire et écrire les données du cache
Si LocalCacheName<> Alors
CacheData=Application(CacheName&_&LocalCacheName)
Si IsArray (CacheData) Alors
CacheData(0)=vNouvelleValeur
CacheData(1)=Maintenant()
Autre
ReDimCacheData(2)
CacheData(0)=vNouvelleValeur
CacheData(1)=Maintenant()
Fin si
SetCache NomCache&_&LocalCacheName,CacheData
Autre
Err.Raise vbObjectError + 1, DvbbsCacheServer, veuillez modifier le CacheName.
Fin si
Propriété de fin
Propriété publique obtenir de la valeur()
Si LocalCacheName<> Alors
CacheData=Application(CacheName&_&LocalCacheName)
Si IsArray (CacheData) Alors
Valeur=CacheData(0)
Autre
Err.Raise vbObjectError + 1, DvbbsCacheServer, le CacheData est vide.
Fin si
Autre
Err.Raise vbObjectError + 1, DvbbsCacheServer, veuillez modifier le CacheName.
Fin si
Propriété de fin
Public Function ObjIsEmpty() 'Détermine si le cache actuel a expiré
ObjIsEmpty=Vrai
CacheData=Application(CacheName&_&LocalCacheName)
Si ce n'est pas IsArray (CacheData), alors quittez la fonction
Si ce n'est pas IsDate (CacheData (1)), alors quittez la fonction
Si DateDiff(s,CDate(CacheData(1)),Now()) < 60*Reloadtime Alors ObjIsEmpty=False
Fonction de fin
Private Sub makeEmpty(SetName) 'Libérer la mémoire
Application.Lock
Application (SetName) = Vide
Application.unLock
Fin du sous-marin
Public Sub DelCache(MyCacheName) 'Supprimer le cache
makeEmpty(CacheName&_&MyCacheName)
Fin du sous-marin
Fin du cours
'Définir WydCache=Nouveau Cls_Cache
'WydCache.Reloadtime=0.5 'Définir le délai d'expiration (en minutes)
'WydCache.CacheName=pages 'Définir le nom du cache
'IF WydCache.ObjIsEmpty() Then ''Déterminez s'il est disponible (y compris l'expiration et s'il est vide)
'Réponse.écrire WydCache.Value
'Autre
'............
'BoardJumpList=xxx
'WydCache.Value=BoardJumpList 'Écrire du contenu
'Réponse.écrire BoardJumpList
'Fin si
'
'mycache.DelCache(nom du cache) supprimer le cache
%>