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.
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
Mana shu joyi yoqdi
Foydalanuvchilar uchun bu tezlik va samaradorlikni anglatadi. Ishlab chiquvchilar uchun bu ishni anglatadi.😁
Mana shu juda kerak bo'ladi
16 kb muammosi
https://medium.com/easy-flutter/androids-16kb-page-size-explained-flutter-migration-made-simple-c9af18d756c1
Medium
Android’s 16KB Page Size Explained: Flutter Migration Made Simple
Google announced that starting November 1, 2025, all new app submissions and updates to Google Play must support the new 16KB memory page…
Forwarded from ONLY FLUTTER with Ibroxim
🚀 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
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
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/
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/
Cloud Application Hosting for Developers | Render
Render is a unified cloud to build and run all your apps and websites with free SSL, global CDN, private networks and automatic deploys from Git.
Notification uchun biznikilar documentation tayyorlashibdi O'zbek tilida "Ipidan ignasigacha "
Tushuntirishgan ekan Firebase Notification Ios uchun ham to'liq yozilgan
https://www.notion.so/Flutter-Notification-Setup-Guide-297361ef573b800b9b54f49020c0add0?source=copy_link
Ibrohimbek Davronbekov’s Workspace on Notion
📱 Flutter Notification Setup Guide | Notion
Flutter ilovasida push notification sozlash bo'yicha to'liq qo'llanma.
👍1
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
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