Стратегии производительности Apollo InMemoryCache для большого набора данных (React) - PullRequest
0 голосов
/ 31 мая 2018

Исходный набор данных, полученный из запроса Apollo Client GraphqQL для приложения, которое я пытаюсь настроить, в настоящее время очень велик.Под «большим» я подразумеваю, что кажется, что данные нормализуются примерно до 7000 записей под ключом «данных» в кеше.Полезная нагрузка составляет около 1,6 МБ.Если бы я сохранил запись данных кеша, она нормализуется примерно до 3 МБ.Я не фанат того, как работает первоначальный запрос, поскольку я в настоящее время перепроектирую их приложение для использования курсоров и фильтрации на графике, а не на клиенте, который выбирает такой большой объем данных и сам фильтрует.Текущая реализация не может масштабироваться из-за больших наборов данных, которые будут возвращены, когда это программное обеспечение установлено в других местах.Но я ищу краткосрочное решение, чтобы ускорить сборку кеша при выполнении очень большой задачи по редизайну.

* ОБНОВЛЕНИЕ 25 июля 2018 г. ** Курсорный подход не работает как производительность записи в кешухудшается по мере добавления новых записей на каждой странице / курсоре данных.

Реальная проблема заключается в том, что IE 11, который мы должны поддерживать из-за использования этого браузера в отрасли (здравоохранение), чрезвычайномедленный.Его очень сложно измерить, но он примерно в 8-10 раз медленнее, чем Chrome, в области кеша Apollo и реагирует на интеграционный код.Chrome может занять 1-2 секунды для создания кэша на этих медленных виртуальных рабочих столах, в то время как IE будет 10-20 секунд.

Итак, мой вопрос: существуют ли какие-либо изменения в производительности, чтобы ускорить сборку кеша?Я приложил скриншот, чтобы показать, где находится узкое место.В Chrome он такой же, как в IE, в IE он примерно на порядок медленнее.Я не уверен, является ли это недостатком IE, или это какая-то сумасшедшая проблема с полифиллом, которая ужасна.На скриншоте показаны горячие точки, которые отображаются в результатах производительности.Да, этот снимок экрана относится к разрабатываемой версии React, но мы не видим реального заметного увеличения производительности в производственной среде.Снимок экрана - это просто вызов графа и простейшая HTML-таблица, отображаемая с 260 строками.Фаза рендеринга незначительна.Кажется, на этом этапе очень много событий в очереди или «работы».Возможно, есть способ приостановить это?Профилировщик Chrome показывает ту же самую горячую точку, но она не такая медленная.

В любом случае, любой совет очень ценится.

Столбцы экрана: функция |количество вызовов |время (секунды)

IE11 performance screenshot

1 Ответ

0 голосов
/ 04 марта 2019

Наша команда сталкивается с похожими проблемами.Наш текущий подход заключается в «денормализации» части схемы сервера в тип String, который содержит строку JSON.На стороне клиента мы проанализируем строку JSON, возвращаемую клиентом Apollo.

...