1. ¿Qué es el almacenamiento en caché de ASP y por qué debería almacenarse en caché?
Cuando su sitio web se crea utilizando tecnología ASP en las primeras etapas, es posible que sienta la conveniencia que brinda la tecnología de páginas web dinámicas ASP, así como la libertad de modificación y el control http gratuito. Sin embargo, a medida que aumenta el número de visitas, definitivamente encontrará que la velocidad de acceso a su sitio es cada vez más lenta y que IIS se reinicia cada vez con más frecuencia. A continuación, debe querer optimizar ASP, como reemplazar la base de datos con un mejor rendimiento, crear índices, escribir procedimientos almacenados, etc. Algunas de estas medidas no requieren una mayor presión de costos, mientras que otras requieren una presión de costos significativa (como el acceso en clústeres a SQL), y el efecto no es necesariamente seguro.
Ante la presión del acceso web, creo que la forma más económica es utilizar tecnología de optimización de caché para aliviar la presión del servicio web.
El aumento del tráfico web a menudo significa un rápido crecimiento de la demanda de los siguientes recursos:
1. El aumento del tráfico de la tarjeta de red requiere más CPU para procesar el tráfico de la red y los subprocesos de E/S de la red.
2. La necesidad de abrir/cerrar conexiones de bases de datos con más frecuencia (si se utiliza tecnología de bases de datos; generalmente ASP usa bases de datos como almacenamiento de datos), la cantidad de cosas que consumen recursos seriamente y los bloqueos causados por transacciones que compiten por los recursos aumentarán la red I/ O O consumo de CPU.
3. Si se usa la sesión, IIS consumirá más memoria para mantener el estado, y el consumo de memoria puede causar memoria física insuficiente, lo que provocará intercambios frecuentes entre la memoria física y la memoria auxiliar, lo que provocará que la ejecución del código se detenga y se bloquee la respuesta web. .
4. Debido a la falta de respuesta oportuna al acceso, provocará fallas en el acceso a la página web, lo que provocará que los usuarios actualicen, exacerbando así la demanda de recursos como CPU y memoria.
De hecho, considerando las aplicaciones web comunes, muchas veces la ejecución dinámica de código es innecesaria.
2. Clasificación del caché asp
En resumen, sin autorización, el caché asp se puede dividir en dos categorías:
1. Caché de archivos
El llamado almacenamiento en caché de archivos se basa en un juicio lógico de que la ejecución específica de un determinado ASP no cambiará significativamente dentro de un período de tiempo, por lo que el contenido se almacena en forma de HTML estático y luego se utiliza la tecnología de redirección web para Permitir que el cliente acceda a los archivos estáticos, para satisfacer las necesidades de reducción de CPU, recursos de base de datos, etc. Existen muchas aplicaciones de este tipo. Por ejemplo, muchos foros regeneran la publicación completa en un archivo estático al responder a una publicación y luego la redirigen, como el foro donews.com. También existe un efecto secundario (beneficio) de ser estático: los motores de búsqueda como Google pueden incluirlo fácilmente. Algunos de los llamados sistemas de comunicados de prensa han adoptado esta tecnología.
2. Caché de fragmentos de archivos
El llamado caché de archivos también se basa en un juicio lógico. Una cierta parte de los datos (generalmente obtenidos mediante consultas de bases de datos de gran capacidad que requieren recursos) no cambiarán dentro de un cierto período de tiempo, por lo que podemos almacenar estos datos en el. forma de archivos. Cuando sea necesario, los datos se pueden obtener leyendo archivos para evitar aumentar la carga en la base de datos. Por ejemplo, generalmente almacenamos algunos datos en formato XML y luego usamos la tecnología XSLT para lograr la visualización (el procesamiento XML generalmente requiere muchos recursos de CPU, por lo que IE generalmente lee el XML directamente al cliente para procesarlo en la CPU del cliente). Así es como se maneja el foro CSDN.
3. Caché de memoria principal
Además, también puede considerar el almacenamiento en caché en la memoria, almacenar contenido que requiere una respuesta oportuna en la memoria y transportarlo inmediatamente desde el almacenamiento rápido una vez que se requiere acceso. Si una gran cantidad de requisitos de acceso se concentran en unas pocas páginas pequeñas o si la memoria principal es lo suficientemente grande, creo que el uso del almacenamiento en caché de la memoria principal definitivamente puede mejorar en gran medida el rendimiento del acceso web.
3. Cómo implementar/usar el caché
Es necesario considerar las siguientes cuestiones al implementar el almacenamiento en caché:
1. ¿Qué páginas no cambiarán en un corto período de tiempo?
Analiza tu propio sitio, hay muchas páginas como esta. Por ejemplo, un sitio web suele tener columnas de noticias e información. Estas columnas suelen ser publicadas por los mantenedores del sitio a una determinada hora del día, y las páginas rara vez se modifican después de esa fecha. Entonces estas páginas son adecuadas para el almacenamiento en caché de archivos estáticos. De hecho, esto es lo que hace el llamado sistema de lanzamiento de noticias, por lo que también puede consultar las ideas de estos sistemas para transformar sus páginas ASP dinámicas originales.
2. Esas páginas se generan usando la misma lógica para todos los visitantes (es decir, los visitantes no se distinguen).
Además de columnas como noticias e información donde todos los visitantes ven la misma interfaz, las aplicaciones que consumen recursos, como los foros, generalmente pueden diseñarse para generar una lógica unificada (Zhang, San y Li For verán la misma publicación de la misma manera). En dichas páginas de aplicaciones, también esto se puede lograr mediante el almacenamiento en caché estático. También puede considerar fragmentar los datos y utilizar tecnología de secuencias de comandos para procesarlos más allá de las capacidades de procesamiento del servidor, es decir, el navegador del cliente.
3. Los costos y beneficios del uso del almacenamiento en caché.
Lo principal es el espacio para el tiempo (de respuesta). Utilice la tecnología de almacenamiento en caché para preprocesar el contenido que se necesitará con frecuencia en el futuro para mejorar la capacidad de respuesta del servidor web y, lo que es más importante, ganarse el favor de los visitantes.
El precio es que la demanda de espacio web aumenta y, al mismo tiempo, el efecto de acceso puede verse afectado.
Pero creo que el almacenamiento en caché adecuado tiene más ventajas que desventajas.
4. Esos lugares no son adecuados para el almacenamiento en caché.
Para las páginas de consulta dinámica, el contenido de la consulta de cada persona es diferente, por lo que los resultados mostrados son diferentes, por lo que es poco probable que almacene en caché los resultados de la consulta. Por lo tanto, el almacenamiento en caché es más complicado y la utilización de la caché es baja, lo que genera altos costos de administración (suponiendo que almacene en caché). 1000 palabras clave de consulta, entonces administrar la correspondencia entre estas palabras clave y el caché también es problemático).
4. Análisis de ejemplo
Supongamos que el diseño original de un foro de sugerencias es el siguiente:
En el directorio raíz:
Página de inicio default.asp, generalmente aspectos destacados, recomendaciones, etc.
listBorad.asp Este archivo enumera los nombres y las introducciones de todas las columnas. Si lleva el parámetro MainBID, significa que se enumerarán las columnas de la sección.
listThread.asp Si este archivo no lleva ningún parámetro, significa enumerar todas las publicaciones, y si lleva MainBID, significa enumerar todas las publicaciones en un bloque determinado. Si se lleva subBID, significa enumerar publicaciones en columnas específicas. Si se lleva el parámetro de página, los temas se enumeran en páginas.
ViewThread.asp enumera el contenido de una publicación. Asumimos que la publicación se muestra como un comentario y que todos los comentarios aparecen al final. El parámetro ID es la publicación que se mostrará.
Reply.asp responde a una publicación y lleva el parámetro Id para responder a una publicación.
De los demás no se hablará por ahora.
De lo anterior, podemos ver que si todo se hace usando ASP/PHP original, entonces la ejecución de casi todos los archivos ASP requiere operaciones de bases de datos, consultas frecuentes y consultas de múltiples tablas. Debe saber que consultar la base de datos eventualmente conducirá a una disminución en el rendimiento y la velocidad de respuesta, lo que afectará la lentitud de la navegación de los visitantes y no favorece la calidad de la web. Lo que es más importante es que para dos personas, A y B, si acceden a ViewThread.asp y similares, si el ID es el mismo, muchas veces verán el mismo contenido (el código HTML recibido por sus navegadores es casi el mismo). Lo mismo), pero para esto Para el mismo contenido, el servidor necesita abrir conexiones de bases de datos, consultar, leer registros, mostrar, cerrar registros y conexiones de bases de datos. . . . Si más personas acceden a las siguientes operaciones que consumen recursos del servidor, el resultado final será que estas personas consumirán más recursos del servidor. De hecho, estos esfuerzos repetidos por el mismo contenido se pueden evitar utilizando tecnología de almacenamiento en caché para la optimización. Por ejemplo:
Después de enviar el contenido en respuesta.asp, inmediatamente llamamos a la función estática y almacenamos todo el contenido de la publicación como un archivo html estático como viewThread_xxxx.htm. En circunstancias normales, al acceder a viewThread.asp?ID=xxxx, el sistema redirige automáticamente. al archivo estático correspondiente viewThreadxxxx.htm. De esta manera, cuando una publicación no tiene la última versión, siempre será contenido estático proporcionado a los espectadores; una vez que haya un nuevo envío, se actualizará al archivo estático. Esto ahorrará muchas operaciones de la base de datos y mejorará enormemente. velocidad de respuesta.
listBorad.asp también se puede implementar de forma estática. Podemos analizar los parámetros que puede contener, establecer el nombre del archivo de caché en listBoard_xx.htm y actualizar listBoard_xxx.htm al agregar nuevas columnas. listThread.asp es similar, excepto que debido a que tiene más parámetros, habrá muchos archivos de caché. Si desea almacenar en caché listThread.asp? subBID=xxx&page=2, entonces el archivo estático correspondiente es listThread_xxx_p2.htm. Lo mismo ocurre con default.asp.
Entonces, ¿cómo se sabe cuándo actualizar? ¿Cuándo se actualizará?
Al analizar listThread.asp? subBID = xxx&page = 2, extraemos el subID y la página al ejecutar listThread.asp, y luego detectamos si listThread_xxx_p2.htm existe. Si no existe, llamamos a la función de generación estática para generar el archivo y finalmente redirigimos. aquí archivos estáticos. Tenga en cuenta que la ausencia aquí significa que hay contenido nuevo que debe actualizarse.
Entonces, ¿cómo hacer que el archivo no exista? borrar. Cuando publicamos una nueva publicación, eliminamos una publicación o movemos una publicación, podemos eliminar todos los archivos estáticos como listThread_xxx_p2.htm. Esto le indica cuándo almacenar en caché.
Ahora queda una pregunta, ¿cómo generar archivos estáticos?
Notemos, lo mismo que mencionamos antes. Podemos hacer una copia de default.asp, listThread.asp, etc. antes de la transformación, denominada default_d.asp, listThread_2.asp, y en el mismo directorio (teóricamente listThtrad.asp?s Los resultados de acceso de ubID=123 y LISTtHREAD_D.ASP?SUBID=123 serán los mismos), por lo que en la lógica que necesita generar archivos estáticos, llamamos a la copia antes de la transformación a través de una solicitud de acceso WEB, obtenemos el código html y lo almacenamos. eso Para archivos estáticos. Esta solicitud web es en realidad equivalente a que el propio servidor vea el HTML que se generará antes de que cualquier navegador real acceda al contenido estático, y luego devuelva estos códigos y los almacene como archivos estáticos utilizando la función de operación de archivos. De esta manera, el archivo de caché se crea antes que el espectador real.
Una solución de este tipo difícilmente alterará el diseño original y casi nunca provocará errores como 404 debido a modificaciones. En segundo lugar, los archivos estáticos también ayudarán a que los motores de búsqueda como Google indexen fácilmente su sitio. ¿Por qué no?
Finalmente, un recordatorio, a través del acceso web, en el entorno de programación ASP, muchas personas usan el componente xmlHTTP para acceder, lo que causará muchos problemas. El propio xmlhttp almacenará en caché los recursos solicitados, lo que provocará que el contenido que solicitamos a través de este componente no sea el más reciente, lo que provocará una confusión lógica. Por lo tanto, debe elegir el objeto http del servidor xml o el componente winhttp para implementar los recursos de solicitud web.
El uso de la tecnología de almacenamiento en caché en ASP puede mejorar enormemente el rendimiento de su sitio web. De hecho, estos métodos de implementación son muy simples. Explicará cómo funciona el almacenamiento en caché en el servidor y cómo puede utilizar un método llamado tecnología de conexión ADO.
Antes de presentar estas tecnologías, expliquemos qué es exactamente la tecnología de almacenamiento en caché ASP.
El llamado caché en realidad sirve para abrir un espacio en la memoria para guardar datos. Al usar el caché, no necesita acceder con frecuencia a los datos que guarda en el disco duro. Al usar el caché de manera flexible, puede evitarlo. la angustia de ver cómo se llena el pobre disco duro. Me tortura leer datos. Una vez que ejecuta una consulta y coloca los resultados de la consulta en el caché, puede acceder rápidamente a los datos repetidamente. Y si no coloca los datos en el caché, cuando vuelva a ejecutar la consulta, el servidor dedicará el proceso a obtenerlos y ordenarlos de la base de datos.
Cuando los datos se almacenan en el caché, el tiempo dedicado a realizar la consulta nuevamente es principalmente el tiempo para mostrar los datos.
En otras palabras, no deberíamos colocar datos que deban cambiar con frecuencia en el caché del servidor. Deberíamos colocar datos que cambien menos pero a los que sea necesario acceder con frecuencia.
Ahora discutiremos cómo ASP usa la tecnología de almacenamiento en caché en el lado del servidor y luego discutiremos cómo ASP la usa en el lado del cliente.
Tecnología de almacenamiento en caché.
Cuando tiene una gran cantidad de datos (estáticos, es decir, menos cambiantes) que deben mostrarse al cliente, puede considerar el uso de tecnología de almacenamiento en caché del lado del servidor. Esta tecnología es especialmente adecuada para sitios web con una fuerte coherencia en el estilo de visualización (jaja, no es fácil de usar para sitios web no convencionales).
De hecho, el método de implementación es muy simple. Solo necesita mirar el ejemplo simple a continuación para comprenderlo.
Este es un programa de ejemplo para mostrar categorías de libros.
Archivo DisplayBooks.ASP:
< %@ IDIOMA=JavaScript % >
<html>
<cuerpo>
<método de formulario=publicación>
Clasificación de libros < %= getBooksListBox() % >
<p>
<tipo de entrada=enviar>
<%
función getBooksListBox()
{
LibrosListBox = Aplicación(LibrosListBox)
si (LibrosListBox! = nulo) devuelve LibrosListBox;
crlf = Cadena.fromCharCode(13, 10)
BooksListBox = <seleccionar nombre=Libros> + crlf;
SQL = Seleccionar * DE Libros ORDENAR POR Nombre;
cnnBooks = Server.CreateObject(ADODB.Conexión);
cnnBooks.Open(Libros, Administrador,);
primeros libros = cnnBooks.Execute(SQL);
fldBookName = primeros libros(BookName);
mientras (! primeros libros.EOF) {
LibrosListBox = LibrosListBox + <opción> +
fldNombreLibro + + crlf;
primeros libros.MoveNext();
}
LibrosListBox = LibrosListBox +
Aplicación(LibrosListBox) = LibrosListBox
devolver BooksListBox;
}
%>
Es muy simple, de hecho, utiliza una tecnología de aplicación muy simple y la diferencia es solo una frase:
Aplicación (LibrosListBox) = LibrosListBox
Puede verificarlo y encontrará que la cantidad de solicitudes en el servidor se reducirá mucho. Esta situación es especialmente adecuada para aquellos contenidos de sitios web que no se actualizan con mucha frecuencia, por ejemplo, solo lo actualizas una vez al día (o durante mucho tiempo).
A continuación, analizaremos una tecnología de almacenamiento en caché del lado del cliente. Esta tecnología también se llama tecnología de conexión ADO desconectada (el nivel de traducción es demasiado bajo, ¿por qué suena tan incómodo)? Esta tecnología se utiliza principalmente para guardar información personal de los usuarios, como contraseñas de usuario, nombres de códigos, etc. Utiliza principalmente algunas propiedades de ADO. Al mismo tiempo, también responde a la pregunta de si los objetos ADO se pueden utilizar en Applocation que algunos internautas han mencionado. La explicación no está clara, deja que el código hable por ti:
Archivo GLOBAL.ASA:
< !--METADATA TYPE=TypeLib FILE=C:/Archivos de programa/Común
Archivos/system/ado/msado15.dll-->
< IDIOMA SCRIPT=VBScript RUNAT=Servidor >
Subaplicación_OnStart
SQL = Seleccionar nombre de usuario, contraseña DE Información de usuario
cnnUsuarios = DSN=Usuario
Establecer rsUsers = Server.CreateObject(ADODB.Recordset)
'Tenga en cuenta que las dos oraciones siguientes se utilizan para implementar la tecnología ADO llamada desconexión disponible.
rsCustomers.CursorLocation = adUseClient
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly
' Desconectamos el RecordSet de la base de datos
rsCustomers.ActiveConnection = Nada
Establecer aplicación (rsCustomers) = rsCustomers
Subtítulo final
Usuariosdearchivo.ASP
<%
'El método de clonación permite que cada usuario tenga su propia colección RecordSet
Establezca susUsuarios = Aplicación(rsUsers).Clonar
Establecer nombre de usuario = sus usuarios (nombre de usuario)
Establecer contraseña = sus usuarios (contraseña)
Hazlo hasta que tusUsuarios.EOF
%>
Nombre de usuario: < %= Nombre de usuario % > Contraseña de usuario: < %= Contraseña % >
<%
susUsuarios.MoverSiguiente
Bucle
%>
En cuanto a la función del almacenamiento en caché, creo que no necesito decir más. Su función ya es obvia, especialmente para sitios web con una gran cantidad de información o páginas de bases de datos completas. Puede hacer un buen uso de los recursos de memoria del host. acelerar la eficiencia de ejecución de ASP, reduciendo la carga en el servidor. Dongwang es el más destacado en este aspecto. Por ejemplo, su versión actual de dvbbs7.1.0 ha llevado el uso del caché a un nivel superior. La mayoría de las operaciones en el frente y en el reverso están relacionadas con el caché, y ahora Qué se usa en. Dongwang es la clase de caché del Hijo Pródigo de la Ciudad Perdida:
<%
Clase Cls_Cache
'==================Instrucciones de uso=====================
'Este módulo es una creación original de Dongwang Pioneer, autor: Lost City Prodigal. Si utiliza este tipo de módulo, no elimine esta descripción. Este comentario no afecta la velocidad de ejecución.
'Rol: Caché y clase de gestión de caché
'Variable pública: tiempo de vencimiento del tiempo de recarga (en minutos), el valor predeterminado es 14400
'MaxCount es el valor máximo de los objetos almacenados en caché. Si se excede, los objetos con menos uso se eliminarán automáticamente. El valor predeterminado es 300.
'CacheName es el nombre total del grupo de caché. El valor predeterminado es Dvbbs. Si hay más de un grupo de caché en un sitio, este valor debe cambiarse externamente.
'Atributo:Nombre define el nombre del objeto de caché, atributo de solo escritura.
'Atributo:valor Lee y escribe datos de caché.
'Función: ObjIsEmpty() determina si el caché actual ha caducado.
'Método: DelCahe(MyCacheName) elimina manualmente un objeto de caché, el parámetro es el nombre del objeto de caché.
'=========================
Tiempo de recarga pública, MaxCount, CacheName
Nombre de caché local privado, datos de caché, DelCount
Subclase privada_Initialize()
Reloadtime=14400 'Tiempo de caducidad (unidad: minutos)
CacheName=Dvbbs 'Nombre total del grupo de caché
Subtítulo final
Sub SetCache privado (SetName, NewValue)
Bloqueo de aplicación
Aplicación (Establecer nombre) = Nuevo valor
Aplicación.desbloquear
Subtítulo final
Propiedad pública Let Name(ByVal vNewValue) 'Nombre del objeto de caché
LocalCacheName=LCase(vNewValue)
Propiedad final
Propiedad pública Let Value (ByVal vNewValue) 'Leer y escribir datos de caché
Si LocalCacheName<> Entonces
CacheData=Aplicación(NombreCaché&_&NombreCachéLocal)
Si IsArray (CacheData) entonces
Datos de caché(0)=vNuevoValor
CacheData(1)=Ahora()
Demás
Redim CacheData(2)
Datos de caché(0)=vNuevoValor
CacheData(1)=Ahora()
Terminar si
SetCache Nombre de caché&_&Nombre de caché local,Datos de caché
Demás
Err.Raise vbObjectError + 1, DvbbsCacheServer, cambie CacheName.
Terminar si
Propiedad final
Propiedad pública obtener valor()
Si LocalCacheName<> Entonces
CacheData=Aplicación(NombreCaché&_&NombreCachéLocal)
Si IsArray (CacheData) entonces
Valor=Datos de caché(0)
Demás
Err.Raise vbObjectError + 1, DvbbsCacheServer, CacheData está vacío.
Terminar si
Demás
Err.Raise vbObjectError + 1, DvbbsCacheServer, cambie CacheName.
Terminar si
Propiedad final
Función pública ObjIsEmpty() 'Determinar si el caché actual ha caducado
ObjIsEmpty=Verdadero
CacheData=Aplicación(NombreCaché&_&NombreCachéLocal)
Si no es IsArray (CacheData), salga de la función
Si no es IsDate(CacheData(1)) entonces salga de la función
Si DateDiff(s,CDate(CacheData(1)),Now()) <60*Reloadtime Entonces ObjIsEmpty=False
Función final
Private Sub makeEmpty(SetName) 'Liberar memoria
Bloqueo de aplicación
Aplicación (Establecer nombre) = Vacío
Aplicación.desbloquear
Subtítulo final
Public Sub DelCache(MyCacheName) 'Eliminar caché
makeEmpty(NombreCaché&_&MiNombreCaché)
Subtítulo final
Fin de clase
'Establecer WydCache = Nuevo Cls_Cache
'WydCache.Reloadtime=0.5 'Definir tiempo de vencimiento (en minutos)
'WydCache.CacheName=pages 'Definir nombre de caché
'IF WydCache.ObjIsEmpty() Luego ''Determinar si está disponible (incluido el vencimiento y si está vacío)
'Respuesta.escribir WydCache.Valor
'Demás
'.................
'BoardJumpList=xxx
'WydCache.Value=BoardJumpList 'Escribir contenido
'Respuesta.escribir BoardJumpList
'Termina si
'
'mycache.DelCache(nombre de caché) eliminar caché
%>