Denny Depok IT Blog

Ngomongin Klorofil Project dan dunia IT, dari perkembangan, gosip sampe teori konspirasinya :D

Archive for December, 2007

Menggunakan Ulang XMLHTTPRequest di IE

Halo.halo..halo…

Dah lama ya saya gak posting disini. Soalnya lagi sibuk (dalam arti baik dan buruk :D). Dah sebulan ini saya porting purefect desktop untuk bisa jalan di IE (ver >= 7 only, makruh hukumnya megang yang lama :D :D :D). Kesimpulan sementara saya, IE 7 lebih baik di beberapa bagian dibandingin Firefox 2 (wah orang microsoft seneng banget nih ada pendukung baru) –> mungkin statement ini perlu data pendukung, nanti ya saya posting percobaan tentang itu. Tapi pendukung microsoft jangan seneng dulu, mrogram di IE 7 tuh perlu banyak banget trik karena ada banyak bug kecil-kecil yang agak mengganggu. Salah satu trik yang diperluin adalah penggunaan ulang XMLHTTPRequest.

Pertama-tama, saya mo bilang kalo purefect desktop tuh salah satu aplikasi AJAX yang bergantung banget dengan XMLHTTPRequest. Jadi sepanjang berjalannya purfect desktop mungkin ada ratusan ato ribuan request yang dibuat melalui XMLHTTPRequest. Sebenernya sih bisa aja untuk tiap request dibuat satu object, kan sistem di javascript pake garbage collector dimana tiap object yang udah gak dipake langsung dibuang (teorinya..). Tapi masalahnya untuk create object tuh nyebabin performance hit yang lumayan (apalagi di IE yang pake ActiveX yang tentu aja prosesnya makin berat karena pernyiapan ActiveX — memori, container proses — lumayan lama).

Salah satu solusinya adalah penggunaan ulang object XMLHTTPRequest (sederhana banget ya solusinya, semua programmer juga tau :D). OK.. OK.. OK.. mungkin gak perlu banget saya posting tentang hal sederhana ini, tapi saya mo bagi pengalaman soal penggunaan ulang XMLHTTPRequest di IE yang perlu trik dikit, soalnya dikit banget referensi yang ngebahas tentang hal ini. Hampir semua site AJAX cuma ngasih contoh melakukan request di XMLHTTPRequest baru, gak pernah menggunakan ulang. Ya wajar sih, soalnya penggunaan ulang kan harusnya sama dengan request baru (di Firefox, Opera, Safari berjalan baik). Tapi di IE perlu trik dikit. Btw ini khusus asynchronous, kalo synchronous gak masalah kayaknya.

Kalo dilihat dari contoh penggunaan AJAX, mungkin penggunaan XMLHTTP Request mirip kaya gini (sorry IE only, yang lain minta bantuan om Google aja) :

// initialization –> biasanya onLoad

var http = new ActiveXObject(”Msxml2.XMLHTTP”);
http.onreadystatechange = requestReady;

function doRequest(url)
{
http.open(”GET”, url, true); // true buat asynch
http.send(”");
}

function requestReady()
{
if (htpp.readyState == 4)
{
// do domething
}
}

nah masalahnya di IE, kalo kita manggil untuk kedua kalinya, maka fungsi requestReady gak pernah dipanggil lagi. Loh padahal kan onreadystatechangenya dah diset ? masalahnya apa ?

Ternyata pas saya coba-coba, di IE, saat kita manggil :

http.open(”GET”, url, true);

semua property dari http direset ulang, makanya supaya bisa dipake ulang kita ubah kodenya sedikit jadi :

// initialization –> biasanya onLoad

var http = new ActiveXObject(”Msxml2.XMLHTTP”);

function doRequest(url)
{
http.open(”GET”, url, true);
http.onreadystatechange = requestReady; // set ulang property setelah open
http.send(”");
}

Coba lagi, pasti jalan :D. Ya emang gak penting banget sih postingannya, tapi lumayan lah ngebantu temen-temen yang pusing kenapa di IE XMLHTTPRequestnya agak beda prilakunya dengan browser lain.

No comments