клиентская модель строк ag-grid в версии сообщества — не работает как официальные документы

#javascript #angular #ag-grid #ag-grid-angular

#javascript #angular #ag-grid #ag-grid-angular

Вопрос:

Использование ag-grid-community версии 22.1.1 в Angular 7

Если мы идем по официальным документам, то модель на стороне клиента должна загружать только доступные записи или заданный размер разбивки на страницы. Но этого не происходит. Когда браузер делает запрос, он ожидает, пока все записи не будут загружены и ответ не будет возвращен, прежде чем представление начнет визуализироваться.

Может кто-нибудь объяснить, неправильно ли я понимаю приведенные ниже формулировки

Вот более подробные эмпирические правила.

Если вы не уверены, используйте клиентскую версию по умолчанию. Сетка может обрабатывать огромные объемы данных (более 100 тыс. строк). Сетка будет отображать только то, что видно на экране (примерно 40 строк, в зависимости от размера вашего экрана), даже если у вас есть тысячи строк, возвращенных с вашего сервера. Вы не уничтожите сетку слишком большим количеством данных — скорее вашему браузеру не хватит памяти, прежде чем у сетки возникнут проблемы. Поэтому, если вы не уверены, сначала используйте модель строки на стороне клиента и меняйте только при необходимости. На стороне клиента вы получаете сортировку, фильтрацию, группировку, поворот и агрегирование, выполняемые за вас сеткой. Все примеры в документации используют клиентскую модель, если не указано иное.

Ссылка на официальные документы, объясняющие различные модели строк и когда что использовать.

Исходя из этого, если я ожидаю, что мой api вернет 500 записей, и я [paginationPageSize]="40" не должен загружать 40 записей и отображать, хотя в фоновом режиме он все равно может загружать все остальные оставшиеся записи в кеш браузера. Но похоже, что он ожидает загрузки всего набора записей в кеш браузера, а затем начинает рендеринг, что влияет на производительность.

Приведенная ниже строка сбивает с толку больше всего

Сетка будет отображать только то, что видно на экране (примерно 40 строк, в зависимости от размера вашего экрана)

Ответ №1:

ag-grid и в этом отношении любая сетка в модели на стороне клиента сначала извлекает все записи, а затем начинает рендеринг в браузере. Но он будет отображать только количество строк, которые помещаются в видимый вид. На это есть очень веская причина.

Рассмотрим сценарий, в котором пользователь вашего приложения выполняет поиск / фильтрацию по определенному полю в сетке, если в сетке на тот момент нет всех данных (она все еще извлекается с сервера в фоновом режиме), она может вернуть Not Found, даже если соответствующие записи существуютв данных, которые еще впереди. Та же проблема будет возникать при сортировке, группировке и т. Д. Операций.

В этой ссылке в документе ag-grid четко указано

По умолчанию grid ожидает, что вы предоставите все данные заранее. Другими словами, ваше приложение загружает полный набор данных в клиент, а затем передает его целиком в grid. Это в отличие от данных на стороне сервера, где данные в основном хранятся на сервере и загружаются в сетку по частям.

Теперь причина, по которой он отображает около 40 записей в представлении, заключается в том, что создание и рендеринг HTML для всех строк сделает страницу очень медленной или непригодной для использования.

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

Комментарии:

1. это означает, что рендеринг и выборка данных — это два разных шага. Я все еще чувствую, что документ должен был быть более понятным. Фактическая разница во времени при рендеринге чего-либо и получении чего-либо намного больше. Поскольку большую часть времени рендеринг выполняется достаточно быстро, требуется время только для загрузки записей из api.

2. Да, как указано в документах, grid будет ждать результата API перед рендерингом. Если вы считаете, что общее время, затрачиваемое на выборку и рендеринг, неожиданно велико для вашего размера данных, то, возможно, вам нужно проверить свои API. Им может потребоваться оптимизация. Конфигурация сервера также является фактором. Но, по моему опыту, скорость рендеринга ag-grid хорошая.