برخیاز کاربران برنامهتان دسترسی متناوب به اینترنت دارند یا محدودیتهایی در مقدار اطلاعاتی که میتوانند در دستگاهشان بارگیری کنند دارند. با کاهش مقدار دادهای که برنامهتان باید بارگیری کند، میتوانید کاربران را تشویق کنید بیشتر با برنامهتان تعامل داشته باشند.
اساسیترین راه برای کاهش بارگیریها این است که فقط آنچه را که نیاز دارید بارگیری کنید. ازنظر داده، این بهمعنای پیادهسازی REST API است که به شما امکان میدهد معیارهای پُرسمانی را مشخص کنید که دادههای برگرداندهشده را بااستفاده از پارامترهایی مانند زمان آخرین بهروزرسانی شما محدود میکند.
بهطور مشابه، هنگام بارگیری تصاویر، بهتر است اندازه تصاویر را در سمت سرور کاهش دهید، نه اینکه تصاویر با اندازه کامل را بارگیری کنید و سپس در سمت کارخواه اندازه آنها را کاهش دهید.
پاسخهای HTTP حافظه نهان
یک تکنیک مهم دیگر این است که از بارگیری دادههای تکراری اجتناب کنید. بااستفاده از حافظه نهان میتوانید احتمال بارگیری مکرر یک داده را کاهش دهید. با ذخیره کردن دادهها و منابع برنامهتان در حافظه نهان، نسخهای محلی از اطلاعاتی که برنامهتان باید به آنها ارجاع دهد ایجاد میکنید. اگر برنامه شما نیاز دارد به یک اطلاعات یکسان چندین بار در یک دوره زمانی کوتاه دسترسی داشته باشد، باید آن را فقط یک بار در حافظه نهان بارگیری کنید.
مهم است که تا حد امکان بهطور تهاجمی حافظه پنهان را ذخیره کنید تا مقدار کل دادههایی را که بارگیری میکنید کاهش دهید. همیشه منابع ایستا، ازجمله بارگیریهای درخواستی مانند تصاویر با اندازه کامل را تا زمانی که منطقی است در حافظه پنهان ذخیره کنید. منابع درخواستی باید جداگانه ذخیره شوند تا بتوانید بهطور منظم حافظه نهان درخواستی را پاک کنید تا اندازه آن را مدیریت کنید.
برای اطمینان از اینکه ذخیره در حافظه نهان منجر به نمایش دادههای قدیمی در برنامهتان نمیشود،
از سرصفحهها و کدهای وضعیت HTTP مناسب
مانند سرصفحههای
ETag
و
Last-Modified
استفاده کنید. این به شما امکان میدهد تعیین کنید چه زمانی محتوای مرتبط باید بازآوری شود. برای مثال:
// url represents the website containing the content to place into the cache. val conn: HttpsURLConnection = url.openConnection() as HttpsURLConnection val currentTime: Long = System.currentTimeMillis() val lastModified: Long = conn.getHeaderFieldDate("Last-Modified", currentTime) // lastUpdateTime represents when the cache was last updated. if (lastModified < lastUpdateTime) { // Skip update. } else { // Parse update. lastUpdateTime = lastModified }
میتوانید برخیاز کتابخانههای شبکهسازی را پیکربندی کنید تا بهطور خودکار به این رمزهای وضعیت و سرایندها احترام بگذارند. برای مثال، هنگام استفاده از OkHttp، پیکربندی دایرکتوری حافظه نهان و اندازه حافظه نهان برای کارخواه به کتابخانه امکان میدهد از حافظه نهان HTTP استفاده کند، همانطور که در نمونه کد زیر نشان داده شده است:
val cacheDir = context.getCacheDir() val cacheSize = 10L * 1024L * 1024L // 10 MiB val client: OkHttpClient = OkHttpClient.Builder() .cache(Cache(cacheDir, cacheSize)) .build()
با پیکربندی حافظه پنهان، میتوانید درخواستهای HTTP کاملاً ذخیرهشده در حافظه پنهان را مستقیماً از فضای ذخیرهسازی محلی ارائه دهید و نیاز به باز کردن اتصال شبکه را ازبین ببرید. پاسخهای ذخیرهشده در حافظه پنهان بهصورت مشروط میتوانند تازگی خود را از سرور تأیید کنند، و هزینه پهنای باند مرتبط با بارگیری را حذف کنند. پاسخهای ذخیرهنشده در حافظه نهان برای درخواستهای آینده در حافظه نهان پاسخ ذخیره میشوند.
میتوانید دادههای غیرحساس را بااستفاده از
Context.getExternalCacheDir()
در فهرست راهنمای حافظه نهان خارجی مدیریتنشده ذخیره کنید.
یا میتوانید بااستفاده از Context.getCacheDir()، دادهها را در حافظه پنهان مدیریتشده و ایمن برنامه ذخیره کنید.
توجه داشته باشید که وقتی فضای ذخیرهسازی دردسترس سیستم کم باشد، ممکن است این حافظه نهان داخلی پاک شود.
استفاده کردن از مخزن
برای رویکردی پیچیدهتر به ذخیرهسازی در حافظه نهان، الگوی طراحی «مخزن» را درنظر بگیرید. این کار شامل ایجاد یک کلاس سفارشی، معروف به «مخزن»، است که یک انتزاع API را روی برخی دادهها یا منابع خاص ارائه میدهد. مخزن ممکن است در ابتدا دادههای خود را از منابع مختلفی مانند یک سرویس وب ازراهدور واکشی کند، اما در تماسهای بعدی، نسخهای از دادهها را که در حافظه پنهان ذخیره شده است به تماسگیرندگان ارائه میدهد. این لایه غیرمستقیم به شما امکان میدهد استراتژی ذخیرهسازی پنهان قدرتمندی ارائه دهید که مختص برنامه شما است. برای اطلاعات بیشتر درباره استفاده از الگوی «مخزن» در برنامه، به راهنمای معماری برنامه مراجعه کنید.