Learning Flutter 📱💻
5 subscribers
117 photos
35 videos
3 files
67 links
Download Telegram
Forwarded from MobilDasturchi.Uz (Azizbek Asqaraliyev)
Flutterda UI thread va Raster thread haqida


1. UI thread

Flutter ilovasida Dart kodlari (siz yozadigan kodlar) asosan UI threadda ishlaydi.

Bu thread vazifasi:

Widget tree’ni qurish (build method’lar)

Layout (elementlarning joylashishi)

Animatsiyalarni hisoblash

State management logikasi

UI thread oxirida natija sifatida Scene yaratadi (SceneBuilder) → bu layer tree bo‘lib, unda qaysi element qayerda, qanday bo‘lishi kerakligi aniqlanadi.

Bu layer tree raster threadga yuboriladi.

👉 Demak, sizning setState(), Bloc, Provider, animatsiyalar — barchasi UI threadda.

2. Raster thread

Raster thread (ba’zan "GPU thread" deb ham atashadi) engine tarafida ishlaydi.

Uning vazifasi:

UI threaddan kelgan Sceneni olib, Skia grafik kutubxonasi yordamida piksellarga (rastr) aylantirish.

Yani GPU yordamida ekranga chizish.

Raster thread siz yozgan Dart kodni bilmaydi, faqat UI threaddan tayyor "qurilgan sahna"ni oladi va uni ekranga chiqaradi.

👉 Masalan, siz 1000 ta widget qo‘shsangiz, UI thread ularni hisoblaydi, raster thread esa tayyor resultni chizadi.

3. Threadlararo muammo

Agar UI threadda og‘ir ish qilsangiz (masalan, katta JSON parse, kriptografiya, video processing) → UI thread band bo‘ladi → frame drop/jank (lag) bo‘ladi.

Agar Raster thread juda ko‘p ishlasa (masalan, juda katta rasmlar yoki gradientlar, ko‘p effektlar) → chizish sekinlashadi → ham lag.

4. FPS va vsync

Flutter maqsadi: har 16ms (60FPS uchun) yoki 8ms (120FPS uchun) da bitta frameni tayyorlash.

Bu jarayon ikki bosqichda:

UI thread → layer tree

Raster thread → ekran chizish

Agar UI thread 20ms ishlasa → raster thread keyin ham kechikadi → stutter paydo bo‘ladi.

5. Qanday optimallashtiramiz?

UI threadni yengillashtirish:

Og‘ir hisob-kitoblarni isolate (yoki compute())ga tashlang.

Build methodlarni qisqa qiling.

const widgetlardan foydalaning.

Raster threadni yengillashtirish:

Juda katta rasmlar ishlatmang (resize qiling).

Overdraw (bir ustiga bir necha marta chizish)dan saqlaning.

Juda murakkab shaderlar va gradientlardan ehtiyot bo‘ling.

RepaintBoundary bilan keraksiz qayta chizishlarni bloklang.

🔑 Xulosa:

UI thread → sizning Dart logika va widget qurishingiz.

Raster thread → tayyor sahnani GPU’da pikselga aylantirish va ekranga chiqarish.

Ikki thread ham vaqtida bitishi kerak, aks holda FPS tushadi.
Geminidan yaxshi maslahat

# analysis_options.yaml

include: package:flutter_lints/flutter.yaml

linter:
rules:
# ----------------------------------------------------
# ✅ const bilan bog'liq asosiy qoidalar
# ----------------------------------------------------

# Mumkin bo'lgan har bir joyda const konstruktorlardan foydalanishni talab qiladi.
# Bu barcha widgetlarni o'z ichiga oladi.
prefer_const_constructors: true

# Final maydonlarni boshlashda const konstruktorlardan foydalanishni talab qiladi.
prefer_const_constructors_in_initializers: true

# Const bo'lishi mumkin bo'lgan o'zgaruvchilarni const qilishni talab qiladi.
prefer_const_declarations: true

# const bo'lishi mumkin bo'lgan o'zgaruvchilarni final qilishni talab qilmaydi (chunki const undan kuchliroq).
prefer_final_locals: false

# ----------------------------------------------------
# Boshqa foydali Performance (Samaradorlik) qoidalari
# ----------------------------------------------------

# Container bo'lishi mumkin bo'lgan Sizedbox yoki Align kabi widgetlardan qochish (Container eng og'ir).
use_decorated_box: true

# Qayta tiklashni minimallashtirish uchun StatelessWidget da final dan foydalanishni talab qiladi.
prefer_final_fields: true

# ----------------------------------------------------
# Xohishga ko'ra boshqa foydali qoidalar (tavsiya etiladi)
# ----------------------------------------------------

# Oddiy bo'lsa, widgetni o'rniga funksiyadan foydalanish (kodni tozalaydi)
avoid_function_literals_in_foreach_calls: false

# Implicitly dynamic turlaridan qochish
always_specify_types: true
Agar hammasini to'gri bo'lsa shunday yozuv chiqadi
bu esa 16 kb ga o'tkazish kerak degan consol qismida ham yozuv chiqarib qoyilgan
Mac da eng ko'p uchraydigan muammo xotirada joy qolmasligi menda eski loyihalar bor kerakli lekin ishlatilmayotgan ularni

flutter clean


qilish orqali 30 GB joy ochdim vaqtim bo'lsa git ga chiqarib yana 60 GB joy bo'shatish mumkin ekan
hullas joy ochish uchun flutter clean qilish yaxshi natija beradi
🚀 Flutter ilova hajmini kamaytirish — advanced optimization

Ko‘pchilik --release build bilan cheklanadi, lekin haqiqiy optimizatsiya undan ancha chuqurroq 👇


---

⚙️ 1. Split build (ABI & density) Har arxitektura uchun alohida APK:

flutter build apk --split-per-abi

Agar --split-per-density qo‘llasangiz, ekran zichligiga qarab rasm resurslari ham bo‘linadi.
👉 Natija: foydalanuvchiga faqat kerakli fayllar ketadi.


---

🧠 2. Obfuscation + Split Debug Info Kod hajmini qisqartirish va xavfsizlikni oshirish:

flutter build appbundle --release \
--obfuscate --split-debug-info=build/info/

Bu Dart kodini siqadi va dekompilyatsiyani qiyinlashtiradi.


---

🧹 3. Proguard + R8 (Native optimizatsiya) android/app/build.gradle:

minifyEnabled true
shrinkResources true

Java/Kotlin kodlarini minifikatsiya qiladi va keraksiz resurslarni o‘chiradi.
⚠️ Ba’zi pluginlar uchun proguard-rules.pro faylini sozlash talab qilinadi.


---

📦 4. Asset & dependency audit flutter build apk --analyze-size bilan aniq tahlil qiling.
Ko‘pincha 10–20 MB hajmni keraksiz package yoki og‘ir asset egallaydi.
SVG, WebP ishlating, flutter_svg va lottie afzal.


---

🪶 5. Font subset To‘liq shrift o‘rniga kerakli qismni (latin/cyrillic) import qiling.
font-subset tool bilan 1 MB shriftni 200 KB gacha tushirish mumkin.


---

💡 Xulosa: Real hajmni kamaytirish — bu “release build” emas, analiz + selective inclusion jarayoni.
Toza konfiguratsiya → kichik APK → tez yuklanish ⚡️

#flutter #appsize #optimization #onlyflutter

@only_flutter
❤1
No comment
Backend uchun yaxshi service topdim
Deploy qilish ham oson gitga push qilib repositoryni renderga ulanadi , branch tanlanadi (misol Main )
misol git ga pull qilinsa
render avtomatik build qiladi
serverni ishga tushiradi
faqat yangilanishni git ga push qilinadi render deploy qiladi o'zi


https://dashboard.render.com/
Forwarded from Botir Ziyatov
Eng qadimiy texnologiya kitobidan:
Sahifa 1:

• Qo‘lda yuvilgan kiyimlar mashina bilan yuvgandan ko‘ra toza bo‘ladi.
• Qo‘lda yozilgan kod AI yozgan koddan yaxshi bo‘ladi.

@botirziyatov
Eng ko'p budilnik ga sarflar ekanman 😁 vaqtimni
Sizlarda qanday
😁1
Flutter widget types
🔥1