Pada update sebelumnya, field "Description" saat menambah task baru telah dihilangkan dan menggantinya di fitur Edit Task dengan fitur baru yang lebih nyaman, dan salah satunya adalah fitur "Auto Save" setiap 30 detik. Karena dirasa waktu 30 detik terlalu cepat, agar tidak boros trafik dengan terus mengupdate data setiap 30 detik, akhirnya waktu auto save ini diperpanjang menjadi 60 detik.
Akan tetapi, perpanjangan waktu auto save menjadi 60 detik ini ternyata tetap tidak efisien, karena di sisi server akan terus mencatat logs update ini, apalagi ketika user meninggalkan halaman "Edit Task" dalam keadaan terbuka. Di background, pengiriman update data terus dilakukan.
Akhirnya, efisiensi perlu dilakukan disisi kode. Fungsi task_save()
yang dijadwalkan setiap 60 detik
setInterval(task_save,60000);
dikembalikan menjadi 30 detik, dengan menambah fungsi task_autosave()
yang didalamnya terdapat prosedur efisiensi auto save.
setInterval(task_autosave,30000);
Dimana fungsi task_autosave()
ini akan melakukan pengecekan terhadap isi dari "Description" yang sedang diedit. Jika terdapat perubahan, barulah fungsi task_save()
dipanggil. Kita tidak akan menggunakan fungsi onChange()
di javascript, karena ini jauh lebih buruk. Karena setiap perubahan "per karakter" akan langsung diupdate ke server. Dan juga, untuk metode komparasinya, kita tidak akan langsung mengecek isi "Description" baris per baris. Selain membutuhkan resource yang lebih besar, cara ini juga berpotensi menghasilkan "false return" ala javascript. Dan solusi untuk masalah ini adalah dengan mengubah isi "Description" menjadi hash
, yang kemudian tinggal dibandingkan dengan hasil hash
"Description" sebelumnya yang telah disimpan di localstorage
.
function task_autosave(){
let c = oo(".ql-editor")[0].innerHTML.replace(/'/g,"\'");
if(ls.taskautosave == "undefined"){
ls.taskautosave = c.toHash();
task_save(false);
} else {
if(ls.taskautosave != c.toHash()){
ls.taskautosave = c.toHash();
task_save(false);
}
}
}
Dengan cara ini, disisi pengguna tidak boros bandwidth, dan di sisi server tidak terjadi logs spamming.
Progrez.Cloud akan selalu melakukan efisiensi program disetiap detail, bahkan pada fungsi sederhana sekalipun. Karena penggunaan resource yang besar tidak hanya berasal dari aktivitas yang besar. Tapi juga berasal dari aktivitas yang kecil, tapi terakumulasi.
Please Enjoy Progrez.Cloud