TL, DR;
Полная история может быть сведена к следующим вопросам:
- как мне сохранить хорошую производительность, выполняя многодинамические асинхронные HTTP-вызовы на веб-странице?
- Является ли GraphQL или WebWorker хорошим способом?
Полная история
У меня естьпроект SPA CMS, в котором динамические данные поступают из разных источников.В результате, чтобы показать таблицу, содержащую много данных, странице необходимо сгенерировать огромное количество HTTP-вызовов.
Я попытался сделать все HTTP-вызовы асинхронными и один изHTTP-вызовы возвращаются, соответствующая ячейка в таблице будет соответственно обновлена.И я уверен, что ни один из HTTP-вызовов не выполняется синхронизированным образом из-за ошибки или небрежности.
Однако проблемы с производительностью все еще существуют.Когда большое количество HTTP-вызовов разрешается за короткий промежуток времени, рендеринг страницы становится проблемой.Как только пользователь пытается выполнить взаимодействия, например, прокрутку мыши и т. Д., Между двумя событиями пользовательского ввода, возникает много разрешенных событий HTTP-вызовов.Хотя каждый обратный вызов повторного рендеринга не займет много времени, он по-прежнему вызывает проблемы с производительностью, если все маленькие временные интервалы суммируются.
В настоящее время я рассматриваю два возможных решения:
- внедрите GraphQL в службу шлюза, чтобы уменьшить общее количество запросов, или
- внедрите WebWorker для пакетной обработки разрешенных HTTP-вызовов, тем самым уменьшив количество обратных вызовов рендеринга в главном потоке.
Решение GraphQL требует большой доработки, чего я стараюсь избегать.Но у меня нет большого опыта работы с WebWorker, будет ли он работать так, как задумано?И есть ли другие решения?
Кстати, для рендеринга таблицы, я использую компонент таблицы элемента пользовательского интерфейса.И совместимость браузера для меня не проблема.