Pernah terbayangkan ketika job asynchronous yang dilakukan memakan banyak memori dalam sekali waktu eksekusi? Hal ini menyebabkan server bisa cepat ngehang.
Kemaren sempat membuat apps kecil kecilan menggunakan NodeJS untuk mempermudah pekerjaan operasional di kantor. Apps ini adalah sebuah crawler yang akan dijalankan dalam waktu tertentu setiap hari nya. Setelah aplikasi selesai dibuat, ternyata setiap kali eksekusi apps tersebut memakan banyak memori yang mengakibatkan server ngehang dan aplikasi lain jadi terganggu.
Alhasil terpikirkan untuk memecah proses tersebut menjadi proses proses kecil. Setelah googling kesana kemari akhirnya ketemu module tiny-async-pool (rekomendasi dari teman juga). Module ini ringan dan mudah digunakan.
Nah, ini contoh cara menggunakan module tiny-async-pool nya
Pertama install modul nya dulu
npm install tiny-async-pool --save
Kemudian buat fungsi yang digunakan untuk eksekusi
let Apps = function(data){
return new Promise((resolve,reject)=>{
console.log("Data ke",data);
resolve();
});
}
Siapkan data inputan dalam bentuk array
let dataInput = [0,2,3,4,5,6]
Kemudian pecah job menjadi bagian bagian kecil
const timeout
=
data =>
new
Promise(resolve => setTimeout(() => { Apps(data).then(()=>{ resolve(i) })} , 30000));
return
asyncPool(2, dataInput, timeout).then(results => {
....
});
30000 : waktu timeout per job (30s)
2 : merupakan jumlah maksimal job yang berjalan secara bersamaan
Jadi, ketika menggunakan modul tiny-async-pool tidak perlu khawatir proses asynchronous saling bertabrakan dan memakan memori banyak. Oh iya, ini termasuk multithreading bukan ya? Hehe.
Photo by Mārtiņš Zemlickis on Unsplash
Berbagai Catatan Tutorial Memanfaatkan Teknologi