ν”Όλ“œλ‘œ λŒμ•„κ°€κΈ°
πŸš€ Flutter Performance Optimization: 10 Proven Tips to Make Your App Faster
Dev.toDev.to
Frontend

Frame Rendering 16ms 달성을 μœ„ν•œ Flutter λ Œλ”λ§ μ΅œμ ν™” μ „λž΅

πŸš€ Flutter Performance Optimization: 10 Proven Tips to Make Your App Faster

Codexlancers2026λ…„ 5μ›” 6일4λΆ„intermediate

Context

μ•± 규λͺ¨ ν™•μž₯ μ‹œ Widget Rebuild λΉˆλ„ μ¦κ°€λ‘œ μΈν•œ UI Lag 및 Frame Drop λ°œμƒ. Main Thread의 κ³ΌλΆ€ν•˜μ™€ κΉŠμ€ Widget Tree ꡬ쑰둜 μΈν•œ λ ˆμ΄μ•„μ›ƒ 계산 λΉ„μš© μƒμŠΉμ΄ μ„±λŠ₯ 병λͺ© μ§€μ μœΌλ‘œ μž‘μš©.

Technical Solution

  • const μƒμ„±μžμ™€ μ „μš© Builder(ValueListenableBuilder, Selector)λ₯Ό ν†΅ν•œ λΆˆν•„μš”ν•œ Widget Rebuild μ΅œμ†Œν™” 섀계
  • compute() ν•¨μˆ˜ 기반의 별도 Isolate ν™œμš©μœΌλ‘œ κ³ λΉ„μš© 연산을 Offload ν•˜μ—¬ Main Thread UI Freeze λ°©μ§€
  • ListView.builder λ„μž…μ„ ν†΅ν•œ Lazy Loading κ΅¬ν˜„μœΌλ‘œ λŒ€κ·œλͺ¨ 리슀트의 λ©”λͺ¨λ¦¬ 점유율 μ΅œμ ν™”
  • RepaintBoundary 적용으둜 λ³΅μž‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜ μ˜μ—­μ˜ Repaint λ²”μœ„λ₯Ό μ œν•œν•˜μ—¬ GPU λΆ€ν•˜ κ°μ†Œ
  • build() λ©”μ„œλ“œ λ‚΄ 무거운 둜직 제거 및 initState() λ‹¨κ³„λ‘œμ˜ 데이터 λ‘œλ”© μ‹œμ  뢄리λ₯Ό ν†΅ν•œ λ Œλ”λ§ μ£ΌκΈ° μ΅œμ ν™”
  • cacheWidth/cacheHeight 섀정을 ν†΅ν•œ 이미지 λ””μ½”λ”© λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ μ œμ–΄

Impact

  • Frame rendering time target 16ms 달성 및 Jank ν˜„μƒ 제거

Key Takeaway

UI μ„±λŠ₯ μ΅œμ ν™”μ˜ 핡심은 λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ˜ λΆˆν•„μš”ν•œ μž‘μ—…μ„ μ œκ±°ν•˜κ³ , μ—°μ‚° λΆ€ν•˜λ₯Ό μ μ ˆν•œ μŠ€λ ˆλ“œλ‚˜ μ‹œμ μœΌλ‘œ λΆ„μ‚°ν•˜λŠ” ꡬ쑰적 νš¨μœ¨ν™”μ— 있음.


- λͺ¨λ“  정적 μœ„μ ―μ— const ν‚€μ›Œλ“œ 적용 μ—¬λΆ€ κ²€ν†  - 60FPS μœ μ§€λ₯Ό μœ„ν•΄ build() λ©”μ„œλ“œ λ‚΄ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 포함 μ—¬λΆ€ 확인 - 고해상도 이미지 μ‚¬μš© μ‹œ cacheWidth/cacheHeight λͺ…μ‹œμ  μ„€μ • - λ³΅μž‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ΄λ‚˜ 차트 μœ„μ ―μ— RepaintBoundary λž˜ν•‘ κ²€ν†  - flutter run --profile λͺ¨λ“œλ‘œ μ‹€μ œ Frame Rendering Time μΈ‘μ •

원문 읽기