체크리스트에 번호 매기기

FxDart 승

요구사항

설치 6단계를 번호 붙은 체크리스트로 바꾸세요 — 1. Unbox the sensor kit처럼, 한 단계에 한 줄, 번호는 1부터 시작합니다. 데이터는 아래 코드에 있으며, 두 버전 모두 예상 출력 아래에 표시된 줄들을 출력해야 합니다.

예상 출력
1. Unbox the sensor kit
2. Charge the base station
3. Pair the remote
4. Mount the wall bracket
5. Run the self-test
6. Register the warranty

나란히 보기

RxDart

FxDart

차이가 나는 이유

코어 Stream에도 RxDart에도 인덱스 있는 map은 없습니다. RxDart가 제공하는 가장 가까운 것은 scan인데, 그 누산기가 마침 세 번째 인자로 인덱스를 받습니다 — 그래서 위의 rx 표기는 fold에 올라타 단계 번호를 매깁니다: 발명해야 하는 시드('')와 곧바로 무시해 버리는 누적값이 등장하죠. 대안들도 종류로 보면 더 깨끗하지 않습니다 — 매퍼가 캡처하는 가변 카운터라든가, Rx.range와의 zip이라든가 — 어떤 경로든 인덱스를 바깥에서 밀반입합니다. 인덱스를 실어 나르는 연산자가 없기 때문입니다. 동작은 하지만, 여전히 우회처럼 읽힙니다.

FxDart는 그것을 직접 말합니다: zipWithIndex가 각 요소를 그 위치와 짝짓고, 평범한 map이 그 쌍을 포맷합니다. 이것은 push 대 pull의 격차라기보다 어휘의 격차입니다 — 인덱스 짝짓기 연산자는 어느 모델에서든 쉽게 표현할 수 있는데, Rx가 그것을 기르지 않았을 뿐입니다 — 하지만 각 패널의 독자는 그 차이를 느낍니다: 한쪽은 "요소와 그 인덱스"라고 진술하고, 다른 쪽은 그것을 누산기의 남는 매개변수에 부호화합니다. 판정: FxDart.

벤치마크

Apple M1 Max, RAM 32 GB · Dart 3.12.2 (AOT 컴파일) · 2026-08-18

N = 100

시간 무승부

RxDart 21 µs
FxDart 11 µs

최대 메모리 무승부

RxDart 16.5 MB
FxDart 16.5 MB

N = 1,000,000

시간 FxDart 승

RxDart 206.9 ms
FxDart 153.9 ms

최대 메모리 무승부

RxDart 197.0 MB
FxDart 199.2 MB

막대는 사이드별로 새 프로세스에서 반복 측정한 중앙값입니다(작은 N은 타이머 해상도를 위해 배치 처리). 두 사이드가 서로 5% 이내이거나 — 사람이 지각할 수 없는 차이인 0.6ms 이내이면 — 무승부로 칩니다. 상대 차이가 근소한 경우는 최대 5회까지 다시 측정합니다. 앱에서는 어느 막대가 짧든 몇 밀리초 이하의 차이는 사용자에게 보이지 않습니다. 메모리는 프로세스 최대 RSS입니다. Dart VM과 데이터셋은 양쪽이 동일하므로, 두 막대의 차이가 곧 파이프라인 자체가 붙들고 있는 양입니다.