اجتناب از بارگیری‌های بهینه‌نشده

برخی‌از کاربران برنامه‌تان دسترسی متناوب به اینترنت دارند یا محدودیت‌هایی در مقدار اطلاعاتی که می‌توانند در دستگاهشان بارگیری کنند دارند. با کاهش مقدار داده‌هایی که برنامه‌تان باید بارگیری کند، می‌توانید کاربران را تشویق کنید بیشتر با برنامه‌تان تعامل داشته باشند.

اساسی‌ترین راه برای کاهش بارگیری‌ها این است که فقط آنچه را نیاز دارید بارگیری کنید. ازنظر داده، این به‌معنای پیاده‌سازی 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
}

جاوا

// url represents the website containing the content to place into the cache.
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
long currentTime = System.currentTimeMillis();
long lastModified = 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()

جاوا

File cacheDir = Context.getCacheDir();
long cacheSize = 10L * 1024L * 1024L; // 10 MiB
OkHttpClient client = new OkHttpClient.Builder()
    .cache(new Cache(cacheDir, cacheSize))
    .build();

با پیکربندی حافظه پنهان، می‌توانید درخواست‌های HTTP کاملاً ذخیره‌شده در حافظه پنهان را مستقیماً از فضای ذخیره‌سازی محلی ارائه دهید و نیاز به باز کردن اتصال شبکه را ازبین ببرید. پاسخ‌های ذخیره‌شده در حافظه پنهان به‌صورت مشروط می‌توانند تازگی خود را از سرور تأیید کنند، و هزینه پهنای باند مرتبط با بارگیری را حذف کنند. پاسخ‌های ذخیره‌نشده در حافظه نهان برای درخواست‌های آینده در حافظه نهان پاسخ ذخیره می‌شوند.

می‌توانید داده‌های غیرحساس را بااستفاده از Context.getExternalCacheDir() در فهرست راهنمای حافظه نهان خارجی مدیریت‌نشده ذخیره کنید. یا می‌توانید بااستفاده از Context.getCacheDir()، داده‌ها را در حافظه پنهان برنامه مدیریت‌شده و ایمن ذخیره کنید. توجه داشته باشید که وقتی فضای ذخیره‌سازی دردسترس سیستم کم باشد، ممکن است این حافظه نهان داخلی پاک شود.

استفاده کردن از مخزن

برای رویکردی پیچیده‌تر به ذخیره‌سازی در حافظه نهان، الگوی طراحی «مخزن» را درنظر بگیرید. این کار شامل ایجاد یک کلاس سفارشی، معروف به «مخزن»، است که یک انتزاع میانای برنامه‌سازی کاربردی را روی برخی داده‌ها یا منابع خاص ارائه می‌دهد. مخزن ممکن است در ابتدا داده‌های خود را از منابع مختلفی مانند یک سرویس وب ازراه‌دور واکشی کند، اما در فراخوانی‌های بعدی، نسخه ذخیره‌شده‌ای از داده‌ها را به فراخوانندگان ارائه می‌دهد. این لایه غیرمستقیم به شما امکان می‌دهد استراتژی ذخیره‌سازی پنهان قوی‌ای ارائه دهید که مختص برنامه شما است. برای اطلاعات بیشتر درباره استفاده از الگوی «مخزن» در برنامه، به راهنمای معماری برنامه مراجعه کنید.