5.8 KiB
5.8 KiB
راهنمای کاهش حجم اپلیکیشن Flutter
چرا حجم اپ زیاد میشه؟
1. Assets (تصاویر و آیکونها)
- هر فایل تصویر/آیکون که از Figma اضافه میکنید، مستقیماً به حجم اپ اضافه میشه
- در حال حاضر شما 119 SVG و 119 VEC دارید (احتمالاً تکراری!)
- همه assets در
pubspec.yamlبه صورت کلی اضافه شدن (assets/icons/)
2. کد Dart
- خود کد Dart حجم کمی داره
- اما dependencies و packages حجم زیادی اضافه میکنن
- کدهای generate شده (freezed, json_serializable) هم حجم دارن
3. مشکلات فعلی پروژه:
- ✅ تکرار assets: هم SVG و هم VEC دارید
- ❌ عدم بهینهسازی تصاویر: PNG به جای WebP
- ❌ شامل شدن همه assets: حتی اونایی که استفاده نمیشن
راهحلها
✅ 1. حذف Assets تکراری
مشکل: شما هم assets/icons/*.svg و هم assets/vec/*.svg.vec دارید
راهحل:
- اگر از VEC استفاده میکنید، SVG ها رو حذف کنید
- یا برعکس، اگر SVG استفاده میکنید، VEC ها رو حذف کنید
✅ 2. بهینهسازی تصاویر
قبل از اضافه کردن از Figma:
- تصاویر رو به WebP تبدیل کنید (حجم 30-50% کمتر)
- از ابزارهای فشردهسازی استفاده کنید:
تبدیل PNG به WebP:
# نصب cwebp (Google WebP tools)
# سپس:
cwebp -q 80 input.png -o output.webp
✅ 3. حذف Assets استفاده نشده
استفاده از ابزار:
# نصب flutter_unused_assets
dart pub global activate flutter_unused_assets
# بررسی assets استفاده نشده
flutter_unused_assets
✅ 4. بهینهسازی pubspec.yaml
به جای:
assets:
- assets/icons/ # همه فایلها
- assets/images/
استفاده کنید:
assets:
- assets/icons/add.svg # فقط فایلهای استفاده شده
- assets/icons/home.svg
- assets/images/inner_splash.webp
✅ 5. استفاده از Asset Variants
برای تصاویر بزرگ، از variants استفاده کنید:
assets/images/
splash.png # برای density 1.0
2.0x/splash.png # برای density 2.0
3.0x/splash.png # برای density 3.0
✅ 6. Lazy Loading برای Assets بزرگ
برای تصاویر بزرگ که همیشه استفاده نمیشن:
// به جای Image.asset
FutureBuilder(
future: rootBundle.load('assets/images/large_image.webp'),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Image.memory(snapshot.data!);
}
return CircularProgressIndicator();
},
)
✅ 7. بهینهسازی Build
در android/app/build.gradle.kts شما این تنظیمات رو دارید (خوبه!):
isMinifyEnabled = true
isShrinkResources = true
اما میتونید اضافه کنید:
buildTypes {
release {
// ...
// اضافه کردن این خط:
isDebuggable = false
}
}
چکلیست قبل از اضافه کردن Asset از Figma
- آیا این asset قبلاً وجود داره؟
- آیا واقعاً نیاز به این asset دارم؟
- آیا میتونم از asset موجود استفاده کنم؟
- آیا تصویر رو به WebP تبدیل کردم؟
- آیا تصویر رو فشرده کردم؟
- آیا فقط فایلهای لازم رو به pubspec.yaml اضافه کردم؟
ابزارهای مفید
-
بررسی حجم اپ:
flutter build apk --analyze-size -
بررسی Assets استفاده نشده:
flutter_unused_assets -
فشردهسازی تصاویر:
-
تبدیل فرمت:
- PNG → WebP: CloudConvert
- SVG → Optimized SVG: SVGOMG
نکات مهم
- همیشه از WebP استفاده کنید به جای PNG/JPG (حجم 30-50% کمتر)
- SVG ها رو optimize کنید قبل از اضافه کردن
- Assets استفاده نشده رو حذف کنید به صورت منظم
- از Asset Variants استفاده کنید برای تصاویر با resolution بالا
- Build Release رو بررسی کنید نه Debug (Debug حجم بیشتری داره)
مثال: کاهش حجم
قبل:
- 119 SVG × 10KB = ~1.2 MB
- 119 VEC × 8KB = ~950 KB
- جمع: ~2.15 MB فقط برای آیکونها!
بعد از بهینهسازی:
- حذف تکرار: فقط 119 فایل = ~1 MB
- بهینهسازی SVG: ~500 KB
- صرفهجویی: ~1.65 MB!
سوالات متداول
Q: چرا با اضافه کردن 50 صفحه Dart حجم زیاد میشه؟ A: خود کد Dart حجم کمی داره، اما:
- Dependencies جدید اضافه میشن
- Assets جدید برای صفحات اضافه میشن
- Build artifacts بیشتر میشن
Q: آیا باید همه assets رو حذف کنم؟ A: نه! فقط اونایی که استفاده نمیشن رو حذف کنید.
Q: چطور بفهمم کدوم assets استفاده نمیشن؟
A: از flutter_unused_assets استفاده کنید یا به صورت دستی جستجو کنید.