El propósito de este artículo es realizar la navegación paginada de big data y optimizar la velocidad.
Para construir una aplicación web, la función de navegación de paginación es esencial; este problema también ha sido el más común durante mucho tiempo y se ha resuelto bien. Entre ellos, existen muchos algoritmos de paginación para programas ASP, como el uso de. Atributos de tamaño de página del objeto ado. Calcula las páginas en función del número total de registros, luego salta al conjunto de registros y luego genera. También hay formas de escribir procedimientos almacenados para implementar datos de paginación. Cada uno de estos aspectos tiene sus propias ventajas y desventajas. A continuación, presentaré un algoritmo de paginación que es muy rápido en proyectos reales
: SQL (Implementado mediante TOP y numeración automática);
secuencia de comandos de página (función de reserva del navegador)
:
IIS/SQL Server/Acceso
Estructura de la tabla:
crear tabla de contenido de tabla (
Número automático IDENTITY(int, 1,1) no nulo,
Código de clasificación<I>var</I>char(20) nulo,
Título<I>var</I>char(255) NULL,
Contenido<I>var</I>char(4000) nulo,
hora fechahora nulo,
)
Principio de implementación:
Esta tabla está configurada con un campo de numeración automática. La característica de este campo es generar una configuración no duplicada, incluido el hecho de que el campo seguirá siendo "fluido" después de eliminar el registro (Nota: generalmente en la construcción de tablas del sistema, esto. El campo rara vez se usa porque el número no se puede administrar libremente, pero se usa aquí principalmente porque quiero omitir el código para el mantenimiento del número en el artículo).
Paginación:
Luego, el primer paso es consultar los datos de una página; si hay 100 registros y se utilizan 20 registros para una página, entonces el algoritmo de paginación habitual es "Número total de páginas = registros totales divididos por el número de control de paginación [Si hay un resto, el número total de páginas más una ]", este enfoque conduce a la necesidad de generar un gran conjunto de registros de todos los registros; por lo tanto, algunas personas han propuesto utilizar el algoritmo de paginación de procedimientos almacenados. El primero es un asp script para generar un gran conjunto de registros, lo cual es bastante lento, y este último está matando pollos. Aunque a menudo escribo procedimientos almacenados, según mi forma de pensar, encuentro que escribir procedimientos almacenados es completamente redundante.
En SQL, muchos amigos que son nuevos conocen la función de la palabra clave Top modificada, por ejemplo: seleccione TOP 1 * de la tabla1: de esta manera, se devuelve un conjunto de registros con un solo registro de la tabla Tabla1. El objetivo de la optimización de la paginación es evitar que la generación de un conjunto de registros excesivamente grande se pueda controlar completamente a través de TOP; ahora la tabla de consulta debe seleccionar la numeración automática, el título, el contenido y la hora del Top 20 de la tabla de contenido.
Pero ahora todavía hay un problema, es decir, cómo posicionarlo. Es imposible que Top posicione y genere automáticamente una determinada página. Aquí es donde la cláusula está diseñada para generar el contenido correcto de acuerdo con una condición específica; nota: el orden de clasificación de los registros es muy importante, esto determina el éxito o el fracaso de este algoritmo;
La demostración aquí es el método DESC, que se organiza en orden inverso. Por ejemplo, para las actualizaciones de software en un sitio web, la actualización más reciente se coloca primero, y este es el método de orden inverso.
Bien, echemos un vistazo al código real. Primero, debemos determinar si es la página de inicio.
dim strSQL,i,endID,isBeginPage
const Cnt_PageSize = 20 'Define el tamaño de cada página de registros
'Determine si es una operación para ingresar a la página siguiente verificando el valor del parámetro Página pasado por el navegador
isBeginPage = isEmpty(solicitud("Página")) o solicitud("Página")="" o solicitud("Página")<>"siguiente"
'Aquí está el núcleo de la paginación.
si esBeginPage entonces 'Si es la página de inicio
'Query = Lista los registros cuyo código de clasificación es igual al parámetro flbm, en orden inverso, y lista solo el primer bolígrafo Cnt_PageSize (Cnt_PageSize es una definición constante, como 20)
strSQL = "seleccione TOP " & Cnt_pageSize & " numeración automática, título, contenido, tiempo de la tabla de contenido donde codificación de clasificación = '" & TRIM(SQLEncode(request("flbm"))) & "' ordenar por numeración automática desc"
else 'si no es la página de inicio
if request("Page")="next" then 'Esto está escrito aquí para mejorar el rendimiento del código. Si el parámetro es el siguiente, significa tomar el contenido de la página.
'Query = Enumere los registros cuyo código de clasificación es igual al parámetro flbm y debe ser menor que el número automático endID (endID también es un parámetro), ordénelos en orden inverso y solo enumere el primer lápiz Cnt_PageSize (Cnt_PageSize es un definición constante, como 20)
strSQL = "select TOP " & Cnt_pageSize & " numeración automática, título, contenido, tiempo de la tabla de contenido donde codificación de clasificación = '" & TRIM(SQLEncode(request("flbm"))) & "' y numeración automática<" & request ("endID") & "ordenar por número automático desc"
terminar si
end if
'Abre la conexión de datos para ejecutar SQL y crear un conjunto de registros
establecer rs = Cnn.Execute(strSQL)
si no es rs.Eof entonces 'Escribe aquí para determinar si es Eof. No es necesario, pero tiene un significado especial aquí.
call TableTitle 'Aquí hay una función autoescrita que se utiliza para crear etiquetas de tabla
llame a beginTr 'Aquí está la marca tr para crear la tabla
para i=0 a rs.fields.Count-1 'Recorre los campos del conjunto de registros
call AddCol(rs(i).name) 'Nombre del campo de salida
Próximo
llamar a endTr
mientras no sea rs.eof 'Recorrer el contenido del conjunto de registros y generarlo
llame a beginTr
para i=0 a rs.fields.Count-1
llamar a AddRow(ASPEncode(rs(i).value))
Próximo
fin de llamadaTr
endID = rs("numeración automática") 'Aquí guarda el valor de numeración automática de cada salida
rs.MoverSiguiente
Encaminarse a
call TableBottom 'Hasta ahora, simplemente genera todo el contenido del conjunto de registros
'La marca de cambio de página se genera aquí, vbaIIF es una función escrita por uno mismo
El prototipo es <I>función</I> vbaIIF(a,b,c)
si un entonces
vbaIIF=b
demás
vbaIIF =c
terminar si
finalizar la <I>función</I>
La implementación de la página anterior se logra llamando a la función del navegador historial.back (1) a través de un script. Entonces no es necesario regenerar datos en el lado del servidor al regresar a la página y no es necesario considerar la velocidad. .
Cuando esté en la página de inicio, el enlace a la página anterior no debe ser válido. Esto se logra mediante vbaIIF(isBeginPage, "disabled", ""). Si es la página de inicio, agregue el atributo deshabilitado a la etiqueta. no es la página de inicio, agregue el comando History.back (1); se usa para retroceder la página de navegación.
La página siguiente debe pasar el parámetro Página y el parámetro endID. La página se establece en siguiente para indicar la acción de la página siguiente. endID indica el número final del conjunto de registros actual, y la página siguiente se paginará a partir de este.
respuesta.Write("〈a href=""#"" onclick=""java<I>script</I>:" & vbaIIF(isBeginPage",","history.back(1);") & "" " " & vbaIIF(isBeginPage," deshabilitado ","") & "〉Página anterior〈/a〉|〈a href=""TypeOptions.asp?flbm=" & request("flbm") & "&Page=siguiente&endID = " & endID & """〉Página siguiente〈/a〉")
demás
'Aquí, al juzgar si el conjunto de registros está vacío, podemos resolver el problema de seguir pasando páginas hasta la última página.
si no esBeginPage entonces
'Determine si es un registro vacío y no es la página de inicio, luego genere un script para la página de reversión. El efecto es que después de ingresar a la página, volverá automáticamente a la página anterior.
respuesta.Escribir "〈<I>script</I> idioma=java<I>script</I>〉" & vbCrlf
Respuesta.Escribir "history.back(1);" & vbCrlf
Respuesta.Escribir "〈/<I>script</I>〉"
Respuesta.Fin
else 'Si es el registro de la página de inicio, estará vacío y le indicará que no hay contenido.
Respuesta.Escribe "〈font color=blue〉No hay contenido en esta categoría〈/font〉"
terminar si
final si
Resumen: a través de scripts de front-end y habilidades de consulta SQL, los programas de paginación de alto rendimiento son simples y rápidos.
Espero que mis compañeros puedan encontrar mejores algoritmos de paginación de datos en tiempo real.
Nota: dado que el foro limita los caracteres HTML, los símbolos clave están en. Letras mayúsculas chinas.