From 2703e0eb65a8f5499e82119c69169b0adce58c9f Mon Sep 17 00:00:00 2001 From: "Dr. Georg Hackenberg" Date: Thu, 11 Jul 2024 17:14:39 +0200 Subject: [PATCH] regular pause to make UI more responsive --- .../frontend/src/scripts/loaders/ldraw.ts | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/frontend/src/scripts/loaders/ldraw.ts b/packages/frontend/src/scripts/loaders/ldraw.ts index 47f02444..75b58a77 100644 --- a/packages/frontend/src/scripts/loaders/ldraw.ts +++ b/packages/frontend/src/scripts/loaders/ldraw.ts @@ -108,7 +108,13 @@ function countParts(context: Model, model: Model) { return count } -async function parseModel(path: string, group: THREE.Group, context: Model, model: Model, loaded: number, total: number, update = empty) { +async function pause(milliseconds: number) { + return new Promise(resolve => { + setTimeout(resolve, milliseconds) + }) +} + +async function parseModel(path: string, group: THREE.Group, context: Model, model: Model, loaded: number, total: number, update = empty, time = Date.now()) { update(undefined, loaded, total) @@ -161,11 +167,21 @@ async function parseModel(path: string, group: THREE.Group, context: Model, mode group.add(child) // Continue loading submodel - loaded = await parseModel(path, child, context, submodel, loaded, total, update) + const result = await parseModel(path, child, context, submodel, loaded, total, update, time) + + loaded = result.loaded + + time = result.time + } + + if (Date.now() - time > 1000 / 60) { + await pause(0) + + time = Date.now() } } - return loaded + return { loaded, time } } function parseFull(data: string) {