Rebuild optimallaşdırması
Flutter-də performans söhbəti demək olar həmişə rebuild ətrafında gedir. Vacib nüans budur ki, build() çağırışı özlüyündə ucuzdur — problem nəyin yenidən qurulmasındadır.
Əsas alətlər:
- `const` konstruktorlar —
constwidget canonicalize olunur və rebuild zamanı ümumiyyətlə yenidən qurulmur. Ən ucuz optimallaşdırma budur - Rebuild sahəsini daraltmaq — vəziyyəti dəyişən hissəni ayrıca widget-ə çıxarmaq,
setState-i mümkün qədər aşağıda saxlamaq - `RepaintBoundary` — tez-tez dəyişən hissəni ayrıca layer-də təcrid etmək (animasiya, video)
- Key-lər — siyahı elementləri yerini dəyişəndə element ağacının düzgün uyğunlaşdırılması
Key-lər ən çox səhv başa düşülən mövzudur. Flutter rebuild zamanı köhnə və yeni widget-ləri tip və mövqe üzrə uyğunlaşdırır. Siyahıda element silinsə və ya yeri dəyişsə, mövqe uyğunlaşması yanlış nəticə verir — vəziyyət (məsələn checkbox-ın seçimi) səhv elementə "yapışır".
ValueKey(item.id) verəndə Flutter uyğunlaşdırmanı şəxsiyyət üzrə edir və problem yox olur.
Qayda: eyni tipdə, sırası dəyişə bilən StatefulWidget siyahısı varsa — key ver. Sırası dəyişməyən statik siyahıda key lazım deyil.
Interview ipucu. Performans sualında ən vacib cümlə budur: əvvəl ölç, sonra optimallaşdır. Namizədlərin çoxu dərhal const və RepaintBoundary sadalayır; güclü cavab isə DevTools-un performance overlay-i və timeline ilə hansı frame-in büdcəni aşdığını tapmaqdan başlayır. 60 fps üçün frame büdcəsi ~16 ms-dir və jank o büdcənin aşılmasıdır.
📚 Mənbələr və sənədlər
- Performans üzrə ən yaxşı praktikalarrəsmidocs.flutter.dev
`const`, rebuild sahəsi və `RepaintBoundary` rəsmi tövsiyələri burada verilib.
- Rendering performansırəsmidocs.flutter.dev
- Key classrəsmiapi.flutter.dev
- RepaintBoundary classrəsmiapi.flutter.dev