Flutterda "hot-reload" ichki jarayonlari.1. Hot Reload tugmasi bosilganda.Qayta yuklash (
hot-reload) boshlanganda, Flutter uskuna (
tool)-laridagi
HotRunner klassi boshqaruvni o'z qo'liga oladi. Ushbu sinf butun jarayonni tartibga solish uchun javobgardir.
HotRunner birinchi navbatda ilovaning hot-reload-ga ruhsat berilgan holatda ekanligini tekshiradi. U oxirgi kompilyatsiyadan keyin qaysi fayllar o'zgartirilganligini aniqlaydi. U
"VM Service Protocol" yordamida
Dart VM bilan bog'lanadi.
2. Manba kodini yangilash (Dart VM code injection).Dart VM yangilangan kodni oladi va uni ishlaydigan dasturga kiritadi.
VM o'zgartirilgan kutubxonalarning yangi versiyalarini yaratadi. Yangilanishlarni samarali boshqarish uchun u "copy-on-write" mexanizmidan foydalanadi. Kodning eski versiyalari, agar kerak bo'lsa, ortga qaytishga ruxsat berish uchun xotirada saqlanadi.
3. JIT yordamida kodni kompilyatsiya qilish.Dart VM-ning JIT kompilyatori yangi kodni tezda kompilyatsiya qiladi.
U optimallashtirish uchun ichki keshlash (
inline caching) va
"type feedback" usullardan foydalanadi. Kompilyator jarayonni tezlashtirish uchun avvalgi kompilyatsiyani iloji boricha qayta ishlatishga harakat qiladi.
4. Eski va yangi vidjet daraxtlarini solishtirish.Flutter framework, yangilanishi kerak bo'lgan narsalarni aniqlash uchun eski vidjet daraxtini yangisi bilan taqqoslaydi.
Bu jarayon Flutterning vidjet va render obyektlari oʻrtasidagi moslashtirish qatlami boʻlgan
Element tree-dan foydalanadi. U vidjet identifikatori va holatini saqlashni boshqara oladigan samarali farqlash algoritmidan foydalanadi.
5. Ta'sir qilingan vidjetlarni aniqlash va qayta tiklash.Taqqoslash asosida Flutter qaysi vidjetlarni qayta qurish kerakligini aniqlaydi va ularni rekonstruksiya qilishni rejalashtiradi.
BuildOwner klassi bu jarayonni boshqaradi va qayta qurish kerak bo'lgan elementlar ro'yxatini saqlaydi. Joriy ilova holatini saqlab qolish uchun iloji boricha
state obyektlari saqlanadi.
6. Xotira va axlat yig'ish (garbage collector)-ni boshqarish.Qayta yuklash jarayonida Flutter oqish (
leak)-ning oldini olish va silliq ishlashini ta'minlash uchun xotirani diqqat bilan boshqarishi kerak.
Dart VM axlat yig'uvchisi endi kerak bo'lmagan narsalarni tozalash uchun ishlaydi. Ramka xotira buzilishini minimallashtirish uchun mavjud ob'ektlarni iloji boricha qayta ishlatishga harakat qiladi.
7. Real time-da UI-ni yangilash.Va nihoyat, Flutter hot-reload paytida kiritilgan o'zgarishlarni aks ettirish uchun UI-ni yangilaydi.
RendererBinding klassi bu jarayonni tartibga solib, layout, painting va kompozitsiyani boshqaradi. Flutter saqlab qolgan renderlash tizimidan foydalanadi, bu unga UI-ni faqat o'zgargan qismlarini samarali yangilash imkonini beradi.
Manba :
Link#Flutter