es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cargando pequeñas cantidades de datos de la API de Lumen

Tengo una API construida en lumen y planeo consumir la respuesta json de la API en el frontend utilizando un framework de página única como Angular.

El problema es que la respuesta de algunas rutas contiene una gran cantidad de datos, aproximadamente 50000 filas hasta ahora. Mi intención es enviar los datos al frontend en pequeñas porciones, dependiendo de cuánto esté utilizando el usuario.

Por ejemplo, en un sitio social, obtienes pequeños fragmentos de publicaciones cargadas a la vez y a medida que te desplazas hacia abajo, se cargan más publicaciones hasta que eventualmente cierras la aplicación.

Me gustaría que mi API haga algo similar. Las alternativas que he considerado son:

  1. Utilizar el método Chunk de Laravel. El problema con este método que he encontrado es que el subdivisionado no trae necesariamente pequeñas cantidades de datos a la vez, simplemente las subdivide y no puedo usarlo porque el servidor tardaría mucho tiempo en cargar si los datos a subdividir son enormes, como en mi caso, y eventualmente se quedará sin memoria, lo cual es una mala experiencia de usuario.

  2. Utilizar el método Paginate de Laravel. Aunque esto hace exactamente lo que describí anteriormente, el problema que tengo es que quiero que los datos estén en formato de lista y se carguen de forma “lazyloaded” (carga perezosa) cuando un usuario llegue al final de una página, exactamente de la misma manera en que lo hace Facebook cuando llegas al último post. No quiero que los usuarios paginen para ver más datos. Me gustaría que la API siga enviando datos dependiendo de dónde los dejó.

¿Qué opciones tengo para lograr esto y también hay alguna solución alternativa a las opciones que mencioné anteriormente?

GRACIAS

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr la carga perezosa de datos en formato de lista, puedes utilizar el método paginate de Laravel con un parámetro adicional de ->getCollection() para obtener los datos en una colección en lugar de un objeto paginador. Luego, puedes transformar los datos en el formato que prefieras y utilizar la carga perezosa en el frontend utilizando una biblioteca como ngInfiniteScroll para Angular.

    En cuanto a soluciones alternativas para las opciones mencionadas anteriormente, puedes utilizar el método ->cursor() en lugar de ->chunk() para obtener un mejor rendimiento y gestión de memoria al tratar con conjuntos de datos enormes. Además, también puedes considerar el uso de una solución de almacenamiento en caché como Redis o Memcached para almacenar los datos y reducir la carga del servidor.

Comments are closed.