fb79a15508
- 添加 sections 定义文件,包含性能优化各领域分类 - 添加规则模板文件,规范文档结构和标签定义 - 添加异步操作优化规则,包括防止瀑布流、并行化、延迟等待等 - 添加包大小优化规则,包括避免桶式导入、动态导入、预加载等 - 添加服务端性能优化规则,包括 API 路
38 lines
1.2 KiB
Markdown
38 lines
1.2 KiB
Markdown
---
|
|
title: Check Cheap Conditions Before Async Flags
|
|
impact: HIGH
|
|
impactDescription: avoids unnecessary async work when a synchronous guard already fails
|
|
tags: async, await, feature-flags, short-circuit, conditional
|
|
---
|
|
|
|
## Check Cheap Conditions Before Async Flags
|
|
|
|
When a branch uses `await` for a flag or remote value and also requires a **cheap synchronous** condition (local props, request metadata, already-loaded state), evaluate the cheap condition **first**. Otherwise you pay for the async call even when the compound condition can never be true.
|
|
|
|
This is a specialization of [Defer Await Until Needed](./async-defer-await.md) for `flag && cheapCondition` style checks.
|
|
|
|
**Incorrect:**
|
|
|
|
```typescript
|
|
const someFlag = await getFlag()
|
|
|
|
if (someFlag && someCondition) {
|
|
// ...
|
|
}
|
|
```
|
|
|
|
**Correct:**
|
|
|
|
```typescript
|
|
if (someCondition) {
|
|
const someFlag = await getFlag()
|
|
if (someFlag) {
|
|
// ...
|
|
}
|
|
}
|
|
```
|
|
|
|
This matters when `getFlag` hits the network, a feature-flag service, or `React.cache` / DB work: skipping it when `someCondition` is false removes that cost on the cold path.
|
|
|
|
Keep the original order if `someCondition` is expensive, depends on the flag, or you must run side effects in a fixed order.
|