Laravel-datatables: La carga de datos es muy lenta para un gran número de filas.

Creado en 8 mar. 2017  ·  14Comentarios  ·  Fuente: yajra/laravel-datatables

Resumen del problema o solicitud de función


Traté de implementar Datatable con Laravel pero tengo un problema cuando mi tabla tiene una gran cantidad de filas porque Datatable obtiene TODO en una sola solicitud y luego la paginación está en el lado de JS. ¿Puedo usar la paginación de Laravel o puedo devolver filas paginadas con el método paginate() de Eloquent en el método ajax? Porque este es un gran problema para mi proyecto. La carga de datos es muy lenta. Cuando busco, el procesamiento de textos también es muy lento y después de alguna operación como sort , search etc. La página se congela y no sucede nada.
Espero que alguien tenga el mismo problema como este.

Fragmento de código del problema

                serverSide: true,
                processing: true,
                render: true,
                columns: [
                    {data: 'code'},
                    {data: 'name', "defaultContent": "<i>Not set</i>"},
                    {data: 'native_name',  "defaultContent": "<i>Not set</i>"},
                    {data: 'action'}
                ],
                ajax: '{!! route('dt-languages') !!}'

Detalles del sistema

  • Sistema OperativoLinux
  • PHP Versión 7.0.4
  • Laravel Versión 5.4
  • Laravel-Tablas de datos Versión 7.2

Comentario más útil

Debe eliminar get para usar el generador de consultas.

return $this->languages->select('languages.*');

Todos 14 comentarios

¿Podría estar usando la colección en lugar de la consulta? ¿Puedes pegar tu código del lado del servidor? ¡Gracias!

Uso un patrón de repositorio y en mi LanguageRepository.php tengo:
return $this->languages->select('languages.*')->get();

Debe eliminar get para usar el generador de consultas.

return $this->languages->select('languages.*');

Bueno. Ahora se ve mejor. Lo probaré de nuevo y escribiré mis resultados.
Pero mientras tanto, hay un problema más. Cuando trato de buscar alguna palabra, me sale este error:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'languages.action' in 'where clause' (SQL: select count(*) as aggregate from (select '1' as `row_count` from `languages` where (LOWER(`languages`.`name`) LIKE %m% count_row_table)

Establezca la acción como no se puede buscar/ordenar desde que se agregó la columna.

¡Muchas gracias! @yajra
Cuando termine con las pruebas, le enviaré los resultados.

Mis resultados de prueba:

Primera consulta:
select count(*) as aggregate from (select '1' as row_count from languages where languages.deleted_at is null and languages.deleted_at is null) count_row_table -> 3,64 ms

Segunda consulta:
select languages.* from languages where languages.deleted_at is null order by code asc limit 10 offset 0 -> 1,05 ms

Gracias @yajra una vez más por la ayuda.

¡Me alegro de haber podido ayudar! ¡Gracias!

Estoy sufriendo el problema. Renderizado lento. Mi consulta del lado del servidor.

 $products = DB::connection("mysql2")->table('products')->
        join('products_description', 'products.products_id', '=', 'products_description.products_id')
            ->select(['products.products_id', 'products_description.products_name', 'products.products_isbn13', 'products.products_distributor', 'products.products_price', 'products.products_status']);
 return Datatables::of($products)->make(true);

ayúdame. ¿Debo escribir mi propio script para paginar? ¿Qué tengo que hacer?
Tengo registros de más de 4.000.000 de productos.
@yajra muy agradecido si me ayudas.

También obtuve este, ¿puede ser que la solicitud de tabla de datos no encadene el parámetro de paginación a la consulta?

@pnghai ¿cómo puedo comprobarlo?

@hsali lo siento. Falsa alarma. Resultó que mi lógica involucraba una captura de imagen remota, que se vincula a un servidor sin salida y obliga a cada registro a buscar una conexión 404 incorrecta, que ocupa un número de registro * 60 (segundos antes del tiempo de espera). Suspendí esa lógica y las cosas funcionan muy bien ahora.

Muchas gracias
(p/s: el nick de pnghai es otra cuenta de github mía)

@pnghai ¿cómo puedo comprobarlo?

¿Fuiste capaz de resolver esto? Si es así, ¿cómo?

Para cualquiera que tenga una carga lenta, es posible que tenga algún tipo de bucle en la función de su controlador que repita los registros obtenidos de alguna manera.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

josiahke picture josiahke  ·  3Comentarios

vipin733 picture vipin733  ·  3Comentarios

ahmadbadpey picture ahmadbadpey  ·  3Comentarios

SGarridoDev picture SGarridoDev  ·  3Comentarios

FilipeBorges1993 picture FilipeBorges1993  ·  3Comentarios