Pregunta

Estoy investigando situaciones en aplicaciones web orientadas a bases de datos en las que uno debería confiar en la ordenación de tablas del lado del cliente sobre la ordenación del lado del servidor. Una situación particular que me está molestando es la paginación.

Al intentar paginar una tabla grande (digamos 10000 filas), así como ordenarla por una columna en particular, ¿cuál sería el mejor enfoque para tomar?

Entiendo que algunos problemas relacionados con esto son:

  • No puedo devolver toda la tabla al lado del cliente de una vez
  • No puedo ordenar hasta 10000 registros con javascript
  • ordenar la tabla implicará ordenar filas en todas las páginas, no solo en la página actual.

Entonces, ¿tiene más problemas para agregar a esta lista?

¿Qué enfoque llevaría a una buena combinación de interacción del lado del cliente y del servidor para minimizar la carga del servidor?


ADICION:

Bien, ordenar la base de datos y devolver la página de solicitud, una página anterior y una página siguiente parece ser la mejor opción.

Ahora considere esto:

El usuario está en la página (3 de 10) de la tabla ordenada por número de serie. Ahora el usuario hace clic en el encabezado llamado " nombre de usuario " ;, queriendo ordenar la tabla por nombre de usuario.

Pregunta: ¿Debería el resultado final ser " página (1 de 10) ordenado por nombre de usuario " o debería ser " página (3 de 10) ordenada por nombre de usuario " ;?

Sé que esta es una pregunta muy subjetiva, pero ¿qué recomendarías y por qué?

¿Fue útil?

Solución

El lado del cliente es más simple: la clasificación / paginación de Javascript es solo para conjuntos de resultados muy pequeños, lo suficientemente pequeños como para que un usuario no note un impacto en el rendimiento.

El lado del servidor es donde puede optimizar la carga del servidor:

La carga puede venir en forma de solicitudes frecuentes de más páginas, grandes cantidades de filas / columnas por página y solicitudes frecuentes de recurso. (Ni siquiera hemos hablado de filtrado)

Entonces, dependiendo de sus usuarios y del uso real , es posible que necesite algún tipo de almacenamiento en caché. Tenga en cuenta que estas son sugerencias por un tiempo DESPUÉS de que sepa lo que están haciendo sus usuarios:

  • Para solicitudes de página frecuentes, considere hacer que algunas solicitudes de Ajax precarguen las siguientes páginas (y anteriores), luego intercambie las filas (a través de Javascript) a la tabla a solicitud del usuario.

  • Para tamaños de página grandes, considere mantener las filas en un " último uso " caché de la aplicación (memoria), por lo que la base de datos no necesita escupir los mismos grandes fragmentos de datos una y otra vez.

  • Para recurrir con frecuencia, un buen enfoque es mantener una tabla de caché en SQL con solo los resultados.

Y siempre, siempre, siempre indexe la base de datos adecuadamente.


Respuesta adicional:

Mi respuesta muy subjetiva es esta: el usuario (yo) quiere ordenar desde una página arbitraria. Déjalos (a mí). No hay nada más molesto que estar donde quieres estar, y que una aplicación te devuelva al principio de la lista.

Otra consideración son los múltiples niveles de clasificación: ¿desea implementar la clasificación por número de serie y luego por nombre de usuario? Considere lo que hace Microsoft Excel o cualquier otra aplicación con la que sus usuarios estén familiarizados. Sus usuarios probablemente estarán bien con lo que están acostumbrados, incluido el regreso a la página 1.

Otros consejos

Las bases de datos son verdaderas bestias en la clasificación y selección de datos. Por lo tanto, lo mejor es que el cliente le diga al servidor, "Quiero que la página X con las filas Y ordenadas por Z". Luego, la base de datos hace lo suyo y el cliente muestra el resultado. Para mejorar el rendimiento, puede obtener los resultados de la memoria caché de su cliente y, además, puede hacer que su código solicite las páginas siguiente y anterior después de que se haya obtenido la actual para que puedan mostrarse instantáneamente a pedido.

El mejor enfoque sería ordenar y paginar a nivel de la base de datos y devolver solo un subconjunto de los datos originales que solo se mostrarán en la pantalla. No hay javascript en este escenario.

Si por alguna razón no puede ordenar y buscar en el nivel de la base de datos, entonces debe hacerlo con un script del lado del servidor. No hay JavaScript en este escenario tampoco.

Y el peor enfoque sería hacer la clasificación y paginación con javascript, que por supuesto no se recomienda en absoluto por razones obvias.

Haga que el db clasifique lo que se entrega a la página en particular en la pantalla. Casi siempre será más rápido, se almacenará en caché y facilitará dicha carga en el navegador.

Si lo desea, haga que el lado del cliente permita una sub-clasificación adicional a través de javascript, etc., si los datos están lo suficientemente detallados y podrían beneficiarse de ella. Es posible que desee almacenar qué características de sub-clasificación seleccionados para que se recuerden entre páginas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top