diff --git a/VERSION b/VERSION index 96ea3ee..48e07bc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.30-beta \ No newline at end of file +0.4.31-beta \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index 70e1180..18d6841 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -85,10 +85,17 @@ updateEmptyHint(); (async function(){ updateBoardsUI(); try{ - const me = await api("/auth/me"); - currentUser = me.user; + /* /auth/me en /me/data hangen allebei alleen af van dezelfde sessie-cookie, + niet van elkaars antwoord - serieel wachten (eerst wie-ben-ik, dan pas + mijn-data ophalen) kost een hele round-trip voor niets. Parallel + opvragen en het tweede antwoord meegeven aan hydrateFromServer() + (die het gewoon negeert voor een leerling/ouder, zie daar) scheelt die + round-trip in het veelvoorkomende geval (staf/thuisgebruiker). */ + const [meResult, dataResult] = await Promise.allSettled([api("/auth/me"), api("/me/data")]); + if(meResult.status !== "fulfilled") throw meResult.reason; + currentUser = meResult.value.user; updateUserUI(); - await hydrateFromServer(); + await hydrateFromServer(dataResult.status === "fulfilled" ? dataResult.value : null); }catch(e){ resetToGuest(); } diff --git a/public/js/core.js b/public/js/core.js index 5e72a79..1241f27 100644 --- a/public/js/core.js +++ b/public/js/core.js @@ -2,7 +2,7 @@ "use strict"; /* version — shown until /api/version resolves (or if the fetch fails, e.g. offline). Kept in sync by hand with the VERSION file at the repo root on every release. */ -const VERSION = "0.4.30-beta"; +const VERSION = "0.4.31-beta"; (function(){ const tag = document.getElementById("verTag"); tag.textContent = "v"+VERSION; @@ -887,7 +887,13 @@ function persistWords(){ function generalExtraFromData(data){ return (data && data.generalExtra) ? data.generalExtra : {nl:[], en:[]}; } -async function hydrateFromServer(){ +/* prefetchedData: alleen gebruikt door de opstart-boot in app.js, die /me/data + al parallel met /auth/me heeft opgehaald (zie daar) i.p.v. serieel te + wachten - een leerling/ouder gebruikt het resultaat toch niet (zie de twee + vroege returns hieronder), dus dat verzoek is nooit verspild werk, alleen + soms ongebruikt. Elke andere aanroep (na inloggen, na een save-conflict) + geeft niets mee en haalt gewoon vers op, zoals voorheen. */ +async function hydrateFromServer(prefetchedData){ /* schoolleerlingen hebben geen eigen borden - zij zien enkel wat de leerkracht heeft toegewezen (zie pupil.js), nooit het whiteboard. Thuiskinderen (leerling zonder school, ouderportaal) vallen hier expres @@ -911,7 +917,7 @@ async function hydrateFromServer(){ } stopPupilView(); stopParentView(); - const res = await api("/me/data"); + const res = prefetchedData || await api("/me/data"); const d = res.data || {}; DATA_REV = typeof res.rev === "number" ? res.rev : 0; THEMES = themesFromData(d);