From 317655b593cc7b9bd4cbe0023b821aaf18ff50b4 Mon Sep 17 00:00:00 2001 From: Bastien DUMONT <bdumont@grandlyon.com> Date: Wed, 24 Jul 2024 16:25:37 +0200 Subject: [PATCH] parallelize steps --- src/components/Splash/SplashRoot.tsx | 41 +++++++++++++------------ src/models/initialisationSteps.model.ts | 6 ++-- src/services/initialization.service.ts | 1 + 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx index 068f256c1..77bead74a 100644 --- a/src/components/Splash/SplashRoot.tsx +++ b/src/components/Splash/SplashRoot.tsx @@ -19,7 +19,6 @@ import { PartnersInfo, Profile, ProfileType, - UserChallenge, } from 'models' import React, { ReactNode, useCallback, useEffect, useState } from 'react' import ActionService from 'services/action.service' @@ -194,19 +193,24 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => { const startTime = performance.now() const transaction = Sentry.startTransaction({ name: 'Initialize app' }) try { - // init Terms - const termsStatus = await initializationService.initConsent() + // Load app in parallel + const [ + termsStatus, + , + profile, + profileType, + profileEcogesture, + fluidStatus, + ] = await Promise.all([ + initializationService.initConsent(), + initializationService.initFluidPrices(), + initializationService.initProfile(), + initializationService.initProfileType(), + initializationService.initProfileEcogesture(), + initializationService.initFluidStatus(), + ]) if (subscribed) dispatch(updateTermsStatus(termsStatus)) - // Init fluidPrices - await initializationService.initFluidPrices() - - // Init profile and update ecogestures, challenges, analysis - const profile = await initializationService.initProfile() - const profileType = await initializationService.initProfileType() - const profileEcogesture = - await initializationService.initProfileEcogesture() - const migrationsResult = await ms.runMigrations(migrations) // Init last release notes when they exist dispatch( @@ -249,11 +253,11 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => { } dispatch(toggleAnalysisNotification(!profile.haveSeenLastAnalysis)) } - // Init Fluid status && lastDate for the chart - const fluidStatus = await initializationService.initFluidStatus() + + // Process fluids status if (subscribed) { dispatch(setFluidStatus(fluidStatus)) - let lastDataDate: DateTime | null = DateTime.fromISO('0001-01-01') + let lastDataDate = DateTime.fromISO('0001-01-01') for (const fluid of fluidStatus) { if (fluid.lastDataDate && fluid.lastDataDate > lastDataDate) { lastDataDate = fluid.lastDataDate @@ -281,10 +285,9 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => { UserActionState.ONGOING ) { const actionService = new ActionService(client) - const updatedUserChallenge: UserChallenge | null = - await actionService.isActionDone( - filteredCurrentOngoingChallenge[0] - ) + const updatedUserChallenge = await actionService.isActionDone( + filteredCurrentOngoingChallenge[0] + ) if (updatedUserChallenge) { dispatch(updateUserChallengeList(updatedUserChallenge)) } diff --git a/src/models/initialisationSteps.model.ts b/src/models/initialisationSteps.model.ts index fd9cb97b4..9ccccf4f4 100644 --- a/src/models/initialisationSteps.model.ts +++ b/src/models/initialisationSteps.model.ts @@ -1,10 +1,10 @@ export enum InitSteps { - MIGRATION, CONSENT, + PRICES, PROFILE, - CHALLENGES, - PRICES, // never used CONSOS, + MIGRATION, + CHALLENGES, } export enum InitStepsErrors { MIGRATION_ERROR = 'migration_error', diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts index b30bb683a..e01b9dd78 100644 --- a/src/services/initialization.service.ts +++ b/src/services/initialization.service.ts @@ -160,6 +160,7 @@ export default class InitializationService { public async initFluidPrices(): Promise<void> { const startTime = performance.now() + this._setInitStep(InitSteps.PRICES) logDuration('[Initialization] Launching fluidPrices service', startTime) const triggerQuery: QueryDefinition = Q(TRIGGERS_DOCTYPE).where({ 'message.name': 'fluidsPrices', -- GitLab