Komparasi response time Volley VS OkHttp VS Android-Spring REST

Cuma ilustrasi aja, jangan dibawa serius.
Post kali ini saya ingin melakukan komparasi beberapa library untuk menghitung kecepatan response time pada server penyedia rest API yang sama dan pada penyedia ISP yang sama juga untuk melakukan akses over HTTP protocol. Dan yang menjadi studi kasus kali ini adalah penggunaan library volley, okhttp dan android-spring, ketiga library ini sudah sering saya gunakan namun belum pernah sekalipun melakukan testing secara detail.
Ok langsung saja, untuk langkah langkah yang akan saya jabarkan meliputi :
- Konfigurasi dan import tiap library yang dibutuhkan
- Nulis source code yang dibutuhkan, ya iyalah :D
Konfigurasi
Untuk konfigurasi, seperti biasa kita tinggal melakukan import library pada build gradle di Android studio, untuk library yang dibutuhkan adalah spring-android, Volley, dan Ok-Http, untuk project ini adalah project yang sama persis pada post sebelumnya mengenai penggunaan AndroidAnnotations untuk DI yang bisa dilihat pada post berikut : Tutorial AndroidAnnotations, berikut adalah penampakan build.gradle seharusnya :
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:cardview-v7:23.0.+'
compile 'com.android.support:recyclerview-v7:23.0.1'
compile 'org.springframework.android:spring-android-rest-template:2.0.0.M1'
compile 'com.github.bumptech.glide:glide:3.5.2'
compile 'com.mcxiaoke.volley:library:1.0.+'
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}Oke clear, setelah itu sync project seperti biasanya, saatnya kita ngoding.
Ngoding time!
Sebagaimana yang sudah saya jelaskan sebelumnya, project ini based on previous project, jadi seharusnya saya ndak perlu panjang lebar lagi menjelaskan penggunaan DI, inti yang saya sajikan disini adalah penulisan 3 method yang masing masing akan melakukan request ke resource yang sama, dengan time response dari server saya yang terhitung lelet (mencapai 2000ms :( ) , dan menggunakan ISP yang sama pula. Berikut potongan ketiga method tersebut :
@Background
void getDataSpringAndroid() {
String response = newsFeedService.getDataSample();
long elapsedTime = System.currentTimeMillis() - startTime;
Log.d("response", response);
updateUi(response, elapsedTime);
}
@Background
void getDataVolley(){
StringRequest myReq = new StringRequest(Request.Method.GET,
Constan.URL_MAIN + "/?json=1",
createMyReqSuccessListener(),
createMyReqErrorListener()) {
};
requestToServerVolley.add(myReq);
}
@Background
void getDataOkHttp() {
com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder().url(Constan.URL_MAIN + "/?json=1")
.build();
com.squareup.okhttp.Response responseFromServer;
try {
responseFromServer = requestRestOkHttp.newCall(request).execute();
String response = responseFromServer.body().string();
long elapsedTime = System.currentTimeMillis() - startTime;
Log.d("response", response);
updateUi(response, elapsedTime);
} catch (IOException e) {
e.printStackTrace();
}
}
Yang saya suka dari penggunaan DI ini, nggak usah lagi maen maen asyntask untuk penggunaan OkHttp, ini yang bisa saya nobatkan sebagai kece ‘BADAI’, oke #skip #lanjut.
Bisa diketahui dari ketiga method diatas, untuk melakukan kalkulasi response, saya menggunakan currentTimeMillis() dikurangi waktu mulai alias startTime, dimana ini akan dihitung saat user melakukan onClick pada view alias button untuk startTime, lalu hasilnya adalah berupa waktu tempuh sebuah library itu untuk melakukan eksekusi request ke server, pokoknya gitu deh, jadi belibet ngomongnya! :D
Nah untuk percobaanya sendiri saya akan lakukan request masing masing untuk tiap library saya beri kesempatan 5 kali request, maka nanti untuk rata-rata akan saya bagi 5,
kok 5 kali bang? kenapa harus 5?
Ah cerewet, suka suka, capek bro banyak banyak. Inilah hasil tabel percobaanya :
Library Request 1 Request 2 Request 3 Request 4 Request 5 Rata-rata Spring-Android 3217 ms 2887 ms 2803 ms 2365 ms 2824 ms 2819.2 ms Volley 2890 ms 2411 ms 2875 ms 2881 ms 3074 ms 2826.2 ms Ok-Http 2569 ms 3343 ms 3897 ms 3169 ms 2314 ms 3058.4 ms
Ehem, jadi dapat disimpulkan dari percobaan diatas, pemenang untuk request yang lumayan cepat ketimbang kandidat lainnya adalah Spring-Android. Mungkin hasil ini memang belum akurat, perlu uji coba lebih lanjut yang lebih mendetail, overall saya suka ketiga library ini, sama sama tangguh untuk melakukan request over HTPP protocol.
Sekian review singkat saya, untuk source code lengkap dapat di fork di repo saya di github disini : https://github.com/mnafian/AndroidAnnotationSample. Untuk video penampakan akan menyusul, dikarenakan device S5 sedang dalam kondisi tidak memungkinkan buat testing. Semoga bermanfaat ya bro.
Thanks gaes