Sparround

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` konstruktorlarconst widget 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 constRepaintBoundary 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