کارایی اپلیکیشن موبایل

کارایی اپلیکیشن، مسئلهای است که روی گوشی برنامهنویس هیچوقت دیده نمیشود.
دستگاه توسعهدهنده جدید و قدرتمند است، روی وایفای است، و اپ همیشه در حافظه گرم است. دستگاه کاربر واقعی هیچکدام از اینها نیست.
اولین و مهمترین توصیه: روی ضعیفترین دستگاهی که هدف گرفتهاید تست کنید، با شبکهٔ همراه. این یک کار است، نه یک توصیه — یک گوشی ارزان چندسالهٔ واقعی بخرید و آن را دستگاه مرجع تست کنید.
چهار چیزی که کاربر حس میکند
۱. زمان شروع
از لمس آیکون تا صفحهای که قابل استفاده است.
هدف: زیر دو ثانیه در شروع سرد.
چه چیزی خرابش میکند:
- بارگذاری همهچیز در شروع. کتابخانههای تحلیل، تبلیغات، پیکربندی راهدور، همه در ثانیهٔ اول. این شایعترین علت است.
- درخواست شبکهای که صفحه منتظرش میماند.
- خواندن حجیم از پایگاه دادهٔ محلی.
چه کاری کمک میکند:
- تنبلسازی. فقط چیزی که برای اولین صفحه لازم است.
- نمایش دادههای کششده، و بهروزرسانی در پسزمینه. کاربر محتوای دیروز را فوری میبیند بهتر از اینکه سه ثانیه صفحهٔ خالی ببیند.
- صفحهٔ اسکلتی بهجای چرخندهٔ بارگذاری. حس سرعت را واقعاً بالا میبرد.
۲. روانی اسکرول
هدف: شصت فریم در ثانیه. یعنی هر فریم باید در حدود ۱۶ میلیثانیه آماده شود.
چه چیزی خرابش میکند:
- کار سنگین روی رشتهٔ اصلی — تبدیل تصویر، پردازش JSON، خواندن فایل.
- لایههای تودرتوی چیدمان.
- تصاویر بزرگی که در لحظهٔ نمایش تغییر اندازه میدهند. تصویر باید در اندازهٔ نمایش از سرور بیاید یا از قبل آماده شده باشد.
- فهرست بدون بازاستفاده از عناصر.
۳. مصرف باتری
کاربری که ببیند اپ شما باتریاش را تمام میکند، حذفش میکند — و این تصمیم برگشتناپذیر است.
پرمصرفترینها به ترتیب:
- GPS پیوسته. فقط وقتی لازم است روشن کنید، نه دائمی. در اپ میدانی و پیک، این تفاوت بین «یک روز کاری کامل» و «تا ظهر» است — همانطور که در جمعآوری داده میدانی گفتیم.
- درخواستهای شبکهای مکرر و کوچک. بیدار کردن رادیو گرانتر از خود داده است. درخواستها را دسته کنید.
- بیدار نگه داشتن صفحه یا پردازنده.
- همگامسازی مکرر پسزمینه.
۴. حجم داده
کاربر ایرانی حجم اینترنت همراهش را میشمارد.
- تصاویر را در اندازهٔ نمایش بفرستید، نه اندازهٔ اصلی.
- فقط تغییرات را همگام کنید، نه کل داده.
- پاسخها را فشرده بفرستید.
- گزینهٔ «فقط روی وایفای» برای دانلودهای سنگین.
حجم فایل نصبی
عاملی که در ایران بیشتر از میانگین جهانی اهمیت دارد: کاربری که با اینترنت همراه دانلود میکند، به حجم نگاه میکند.
آنچه حجم را زیاد میکند: تصاویر با چند اندازه برای همهٔ چگالیها، فونتهای فارسی متعدد، کتابخانههای بزرگ برای یک قابلیت کوچک، و منابع استفادهنشده که هیچوقت پاک نشدند.
آنچه کمک میکند: حذف منابع بیاستفاده، فشردهسازی تصاویر، بارگذاری منابع سنگین از سرور بهجای جاسازی، و بررسی دورهای اینکه هر کتابخانه چقدر اضافه میکند.
چطور اندازه بگیریم
نه با حس. با ابزار:
- پروفایلر رسمی برای پیدا کردن گلوگاه واقعی.
- پایش در تولید: زمان شروع، فریمهای افتاده، خرابی، و همهٔ اینها به تفکیک مدل دستگاه. آن تفکیک مهم است — معمولاً مشکل روی چند مدل خاص متمرکز است.
- دستگاه مرجع ضعیف، که بالا گفتیم.
و اندازه بگیرید پیش از بهینهسازی. بیشتر تیمها وقتشان را صرف جایی میکنند که مشکل نیست. پروفایلر تقریباً همیشه جای دیگری را نشان میدهد.
آنچه در شرایط شبکهٔ ایران خاص است
شبکه قطع و وصل میشود. اپ باید این را حالت عادی فرض کند، نه استثنا.
- تلاش مجدد با فاصلهٔ فزاینده، نه بلافاصله.
- صف درخواستها برای وقتی که شبکه برمیگردد.
- هر ارسال باید قابل اجرای دوباره باشد بدون اثر مضاعف. در تایماوت نمیدانید سرور دریافت کرد یا نه؛ شناسهٔ یکتای تولیدشده روی دستگاه، حلش میکند. جزئیاتش در کارهای پسزمینه.
تأخیر بالا. طراحیای که برای هر عمل کاربر یک رفتوبرگشت شبکه لازم دارد، اینجا کند حس میشود. پاسخ خوشبینانه بدهید: رابط فوراً واکنش نشان دهد و در صورت شکست برگردد.
نمایش وضعیت آفلاین. کاربر باید بداند مشکل از اپ نیست.
دامهای رایج
بهینهسازی زودهنگام. با صد کاربر و دادهٔ کم، همهچیز سریع است. مشکل را پیدا کنید، بعد حل کنید.
تست فقط با دادهٔ کم. فهرستی که با بیست رکورد روان است، با دو هزار رکورد نیست. با حجم واقعی تست کنید.
نادیدهگرفتن شروع سرد. بیشتر تستها روی اپی انجام میشود که در حافظه است. کاربر واقعی اغلب شروع سرد دارد.
فرض اینکه سختافزار جدید مشکل را حل میکند. میانگین دستگاه در بازار ایران، چند سال از پرچمداران عقب است.
یک قاعدهٔ ساده برای اولویتبندی
اگر نمیدانید از کجا شروع کنید، به این ترتیب:
۱. زمان شروع — اولین چیزی که هر کاربر تجربه میکند. ۲. روانی صفحهٔ اصلی — پرتکرارترین. ۳. مصرف باتری — چون تصمیم حذف اپ را میسازد. ۴. حجم داده. ۵. بقیه.
و در هر مرحله، قبل و بعد را اندازه بگیرید. بهینهسازی بدون عدد، حدس زدن است با کد.