mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
* chore(ai-workflow): track repo-managed review tooling * fix(ai-workflow): remove repo-specific path assumptions Make shared workflow hooks and APK testing guidance resolve paths from the repo and contributor environment so the tooling works for all contributors, not just one machine.
52 lines
1.3 KiB
Markdown
52 lines
1.3 KiB
Markdown
---
|
||
title: Dependency-Based Parallelization
|
||
impact: CRITICAL
|
||
impactDescription: 2-10× improvement
|
||
tags: async, parallelization, dependencies, better-all
|
||
---
|
||
|
||
## Dependency-Based Parallelization
|
||
|
||
For operations with partial dependencies, use `better-all` to maximize parallelism. It automatically starts each task at the earliest possible moment.
|
||
|
||
**Incorrect (profile waits for config unnecessarily):**
|
||
|
||
```typescript
|
||
const [user, config] = await Promise.all([
|
||
fetchUser(),
|
||
fetchConfig()
|
||
])
|
||
const profile = await fetchProfile(user.id)
|
||
```
|
||
|
||
**Correct (config and profile run in parallel):**
|
||
|
||
```typescript
|
||
import { all } from 'better-all'
|
||
|
||
const { user, config, profile } = await all({
|
||
async user() { return fetchUser() },
|
||
async config() { return fetchConfig() },
|
||
async profile() {
|
||
return fetchProfile((await this.$.user).id)
|
||
}
|
||
})
|
||
```
|
||
|
||
**Alternative without extra dependencies:**
|
||
|
||
We can also create all the promises first, and do `Promise.all()` at the end.
|
||
|
||
```typescript
|
||
const userPromise = fetchUser()
|
||
const profilePromise = userPromise.then(user => fetchProfile(user.id))
|
||
|
||
const [user, config, profile] = await Promise.all([
|
||
userPromise,
|
||
fetchConfig(),
|
||
profilePromise
|
||
])
|
||
```
|
||
|
||
Reference: [https://github.com/shuding/better-all](https://github.com/shuding/better-all)
|