Frame Rendering 16ms λ¬μ±μ μν Flutter λ λλ§ μ΅μ ν μ λ΅
π Flutter Performance Optimization: 10 Proven Tips to Make Your App Faster
AI μμ½
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 μΈ‘μ