From cb8950e81a034387b78efef0bbf5ab0de33aa603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E4=BB=A3=E7=B6=BA=E5=87=9B?= Date: Sat, 17 Aug 2024 00:36:34 +0800 Subject: [PATCH] feat: use promise pool --- bun.lockb | Bin 100691 -> 101073 bytes package.json | 1 + src/workers/git.ts | 28 ++++++++++++++++++---------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/bun.lockb b/bun.lockb index 0e291b720143db5ccd72f1521cadf07bddf78c71..7748461b0516256e2b21242a36303dca4b5c1608 100755 GIT binary patch delta 15688 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 afy}?#@99K_|5KK5JZVSNeld_uP5NKqs;Q&^ delta 15400 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 diff --git a/package.json b/package.json index a56b56a..8d15492 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@isomorphic-git/lightning-fs": "^4.6.0", + "@supercharge/promise-pool": "^3.2.0", "@vueuse/core": "^11.0.0", "buffer": "^6.0.3", "isomorphic-git": "^1.27.1", diff --git a/src/workers/git.ts b/src/workers/git.ts index ef83d33..77c2d59 100644 --- a/src/workers/git.ts +++ b/src/workers/git.ts @@ -2,6 +2,7 @@ import LightningFS, { type PromisifiedFS } from '@isomorphic-git/lightning-fs'; import http from 'isomorphic-git/http/web'; import git, { TREE, WORKDIR, type WalkerEntry } from 'isomorphic-git'; import { Buffer } from 'buffer/'; +import { PromisePool } from '@supercharge/promise-pool'; (globalThis as any).Buffer = Buffer; @@ -179,6 +180,7 @@ export class Git { private async copyDir(parentHandler: FileSystemDirectoryHandle, parentResult: WalkResult, state: { cur: number; total: number }) { if (!parentResult.children) return; + const tasks: Array<() => Promise> = []; await Promise.all( parentResult.children.map(async result => { try { @@ -186,16 +188,18 @@ export class Git { const dirHandler = await parentHandler.getDirectoryHandle(result.name, { create: true }); await this.copyDir(dirHandler, result, state); } else { - const content = await result.entry.content(); - if (!content) return; - const fileHandler = await parentHandler.getFileHandle(result.name, { create: true }); - const writable = await fileHandler.createWritable(); - await writable.write(content); - await writable.close(); - state.cur++; - this.onProgress({ - value: state.total === 0 ? 1 : state.cur / state.total, - desc: `Write (${state.cur}/${state.total}): ${result.path}`, + tasks.push(async () => { + const content = await result.entry.content(); + if (!content) return; + const fileHandler = await parentHandler.getFileHandle(result.name, { create: true }); + const writable = await fileHandler.createWritable(); + await writable.write(content); + await writable.close(); + state.cur++; + this.onProgress({ + value: state.total === 0 ? 1 : state.cur / state.total, + desc: `Write (${state.cur}/${state.total}): ${result.path}`, + }); }); } } catch (error) { @@ -203,6 +207,10 @@ export class Git { } }), ); + await PromisePool.withConcurrency(navigator.hardwareConcurrency) + .for(tasks) + .handleError(console.error) + .process(func => func()); } private async emitUpdateCommits() {