Почему Datatables очень медленно работает с laravel?

У меня есть проект с laravel, в котором он использовал «yajra/laravel-datatables», проблема в том, что он очень медленный, когда дело доходит до выборки данных с сервера.

В этом проекте всего 11 000 записей, и я разбиваю его на страницы с таблицами данных 10 из 10. Чтобы вывести первые 10, требуется более 3 секунд.

Почему Datatables очень медленно работает с laravel?

У нас есть еще один проект, который изначально был сделан с помощью PHP и Datatables, и там около 50 000 записей, и он работает мгновенно, вводя первые 10 записей, плюс это такая же вычислительная мощность (это занимает 100 миллисекунд).

Моя инфраструктура находится в Amazon Web Services.

Из-за того, как мы доставляем данные в Datatables, я подозреваю, что он приносит все данные из базы данных и доставляет только 10 записей в интерфейс. Однако это занимает больше времени, поскольку он получает все записи в базе данных.

$query = DB :: select( 'QUERY SQL' );
return DataTables :: of( $query ) -> toJson();

Выполнение запроса в рабочей среде занимает около 200 миллисекунд, чтобы получить всю информацию.

С вами трудно отлаживать, не видя реального кода. Однако вы можете попробовать добавить прослушиватель запросов, чтобы увидеть, какие запросы выполняются. laravel.com/docs/5.8/database#listening-for-query-events

Oliver Nybroe 06.07.2019 17:50

Да, вы создаете DataTable из набора из 11 тысяч строк. Не запрашивайте данные перед таблицей, позвольте пакету сделать запрос.

Namoshek 06.07.2019 18:08

Здравствуйте, большое спасибо за ваш комментарий и фактически приводит все записи базы данных. Проблема в том, что мне нужно использовать необработанный запрос для некоторых проблем с реализацией.

Gustavo Martínez 06.07.2019 18:17

Кто-то знает, как сделать запрос сырым и извлечь в Laravel только те данные, которые ему нужны.

Gustavo Martínez 06.07.2019 18:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
1 419
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не совсем уверен, как создать целый экземпляр Builder из необработанного запроса, но что вы определенно можете сделать, так это использовать подзапрос:

$builder = DB::query()->fromSub(
    DB::raw($theQueryString),
    'wrapped_query'
);

return datatable($builder)->toJson();

Это также имеет то преимущество, что и сортировка, и поиск будут работать безупречно даже с объединенными таблицами.

Другие вопросы по теме