Стратегии производительности Apollo InMemoryCache для большого набора данных (React)

Исходный набор данных, полученный из запроса 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 показывает ту же самую горячую точку, только не такой медленный.

В любом случае, любой совет приветствуется.

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

Стратегии производительности Apollo InMemoryCache для большого набора данных (React)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
1 320
2

Ответы 2

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

Как этот подход работает у вас сейчас?

Imdadul Huq Naim 01.12.2020 11:18

Apollo 3.0 будет иметь возможность отключить нормализацию кеша для типа: https://www.apollographql.com/docs/react/v3.0-beta/caching/cache-configuration/#disables-normalization

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