Application Performance: Caching For Networking

Screen Shot 2016-02-23 at 22.40.34

Bir diฤŸer konu da datayฤฑ nasฤฑl alacaฤŸฤฑmฤฑz. Her seferinde servera gidilmeli mi, cachelenmeli mi? EฤŸer cache’lenmeliyse nasฤฑl cachelenmeli?

Datayฤฑ cache’den okumak her seferinde servis รงaฤŸฤฑrmaktan tabi ki daha performanslฤฑdฤฑr. EฤŸer sรผrekli kullanฤฑlacak bir dataysa bu datayฤฑ cihaza cachelemek รงok daha hฤฑzlฤฑ okunmasฤฑnฤฑ saฤŸlayabilir. Network’den bir dosya รงektiฤŸimizi ve bunu sonrasฤฑnda da kullandฤฑฤŸฤฑmฤฑzฤฑ dรผลŸรผnรผrsek cachelemek รงok mantฤฑklฤฑ bir รงรถzรผm.

Burada รถnrmli olan HTTP Responslarฤฑnฤฑn cachelenmesi default’da disable’dฤฑr. Http Responselarฤฑnฤฑ kullanarak cachelemek demek aslฤฑnda HttpResponseCache class’ฤฑnฤฑ kullanmak demektir.

@Override

protected void onCreate(Bundle savedInstanceState) {

ย ย super.onCreate(savedInstanceState);

ย ย try{

ย ย ย ย ย ย File httpCacheDir = new File(getBaseContext().getCacheDir(),“http”);

ย ย ย ย ย ย long httpCacheSize = 10*1024*1024; //10Mib

ย ย ย ย ย ย HttpResponseCache.install(httpCacheDir, httpCacheSize);

ย ย }catch (IOException e){

ย ย ย ย ย ย Log.i(TAG, “HTTP response cache installation failed.” + e.getMessage());

ย ย }

}

@Override

protected void onStop() {

ย ย super.onStop();

ย ย HttpResponseCache cache = HttpResponseCache.getInstalled();

ย ย if(null != cache){

ย ย ย ย ย ย cache.flush();

ย ย }

}

Ki bu da aslฤฑnda cihazda fiziksek storage iรงin bir lokasyon tanฤฑmlamamฤฑza izin verir. Bu alan cache iรงin ayrฤฑlarak max size kadar tanฤฑmlanฤฑr. Bir kere enabled edildiฤŸinde ise, tรผm Http Response’lar cachelenecektir. (dosya sisteminde) Bu tรผm API’lara, URL connection’lara uygulanฤฑr. Tabi library’lerinde yaptฤฑฤŸฤฑ tรผm requestler cachelenir.

Screen Shot 2016-02-23 at 22.55.08

EฤŸer cachelenmemesi gereken bir request olursa, aลŸaฤŸฤฑdaki gibi kullanฤฑlabilir.

Screen Shot 2016-02-23 at 23.04.19

EฤŸer data gelene kadar cache’den okuyup sonra refresh etmesi gereken bir durum olursa da aลŸaฤŸฤฑdaki gibi kullanฤฑlabilir.

Screen Shot 2016-02-23 at 23.04.25

Burada data cihazdan sadece 2 ลŸekilde kaldฤฑrฤฑlฤฑr.

  1. Cache tamamen dolduysa
  2. Cache kontrol Header’ฤฑna gรถre

Screen Shot 2016-02-23 at 23.02.37

HTTP 1.1 std server cihaza ne kadar sรผreyle cachelemesini gerektiฤŸini sรถylรผyor. 3 gรผn de olabilir hiรง cacheleme de diyebilir. Basit network iลŸlemlerinde ya da servera mรผdahale edebildiฤŸimizde bu faydalฤฑ bir kullanฤฑm.

EฤŸer cache’i yรถnetemiyorsak ya da farklฤฑ bir cihazsa ve bu cihazda depolama yapamฤฑyorsak, bu durumda kendi cache รงรถzรผmรผmรผzรผ yazmamฤฑลŸ gerekir.

Bu noktada sฤฑfฤฑrdan herลŸeyi yazmak zordur. DiskLRUCache.Javaย class’ฤฑndan faydalanฤฑlabilir. Ya da aลŸaฤŸฤฑdaki hazฤฑr library’lerden biri รงรถzรผm olarak kullanฤฑlabilir.

  • Volley
  • okHHTP
  • Picasso

Picasso’nun kendi image cache mekanizmasฤฑ vardฤฑr.

Referanslar:

http://developer.android.com/reference/android/net/http/HttpResponseCache.html

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.