Я хотел бы знать, как долго мое приложение становится "готовым" для взаимодействия с ним. Временная шкала загрузки приложения включает в себя следующее:
- Загрузка DOM.
- Первоначальный рендер.
- HTTP-вызовы, вызванные различными
componentDidMount()
s - Возврат HTTP-вызовов. Состояние Redux обновляется с ответами HTTP.
- React отображает новые значения из ответов HTTP.
- Вся начальная загрузка завершена. Пользователь готов к взаимодействию с приложением.
В конце этого процесса я хочу запустить событие отслеживания, чтобы записать значение window.performance.now()
.
Я не уверен, что лучший способ сделать это. Реагирующая система компонентов отлично справляется с развязкой различных частей пользовательского интерфейса. В этом случае это, к сожалению, означает, что у меня не будет одного простого места, чтобы проверить, "все ли сделано с новыми данными".
Вещи, которые я пробовал:
- Посмотрите на крючок жизненного цикла React, который сообщает мне, обновляется ли какой-либо ребенок. Что-то вроде
componentOrAnyChildDidUpdate()
. Я не думаю, что это существует, и это может противоречить философии Реакта. - Взломайте крючок жизненного цикла
anyChildDidUpdate()
черезcontext
и сделайте каждый компонент в моем приложении либо подклассом вспомогательного абстрактного базового класса, либо обернутым в компонент более высокого порядка. Это кажется плохим, потому чтоcontext
является экспериментальным API. - Подпишитесь в состояние Redux через
store.subscribe()
. Обновите состояние Redux, чтобы иметь явную запись о возврате всех HTTP-вызовов. После того, как все HTTP-вызовы вернулись, и React завершит повторную визуализацию, я знаю, чтобы запустить обратный вызов отслеживания. Проблема заключается в том, что когда React завершает повторный рендеринг. Он работал бы, если бы мойstore.subscribe()
обратный вызов гарантированно выполнялся синхронно после обратного вызоваreact-redux
. Но это не так.
Есть ли хороший способ сделать это в React?