
Featured
Percepat performa timer pada Javascript
Ketika membangun web yang sangat besar ( Maksudnya banyak animasi
), kebutuhan penggunaan setTimeout dan setInterval pada Javascript semakin besar. Penggunaan setTimeout dan setInterval yang terlalu banyak akan mengurangi performa browser Anda. Solusi untuk permasalahan ini adalah dengan membuat Global Interval yang akan melakukan beberapa perintah setTimeout ke dalam satu interval secara berkesinambungan.

Caranya adalah dengan menyiapkan satu interval yang selalu berjalan, dan satu Array yang memuat request timeout yang harus dilakukan. Berikut adalah script yang dapat digunakan sebagai pengganti setTimeout dan setInterval:
var gto_vars = new Array();
var gto_id_cnt = 1;
function gto_eval(code){
try{
if (isFunction(code))
code();
else
eval(code);
}
catch (e){
}
}
function gto_doInterval(){
var gtc = getTickCount();
for (var handle in gto_vars){
if (gto_vars[handle][1]<=gtc){
var intv = gto_vars[handle][2];
gto_eval(gto_vars[handle][0]);
if (intv==0)
delete gto_vars[handle];
else
gto_vars[handle][1]=intv+gtc;
}
}
}
function gtoInterval(code,interval){
gto_id_cnt++;
var curr_id = "T"+gto_id_cnt;
gto_vars[curr_id] = new Array(code,interval+getTickCount(),interval);
return curr_id;
}
function gtoSet(code,interval){
gto_id_cnt++;
var curr_id = "T"+gto_id_cnt;
gto_vars[curr_id] = new Array(code,interval+getTickCount(),0);
return curr_id;
}
function gtoClear(handle){
if (gto_vars[handle])
delete gto_vars[handle];
}
function isFunction(x) {
return Object.prototype.toString.call(x) === "[object Function]";
}
function getTickCount(){
return (new Date().getTime());
}
var gto_id_cnt = 1;
function gto_eval(code){
try{
if (isFunction(code))
code();
else
eval(code);
}
catch (e){
}
}
function gto_doInterval(){
var gtc = getTickCount();
for (var handle in gto_vars){
if (gto_vars[handle][1]<=gtc){
var intv = gto_vars[handle][2];
gto_eval(gto_vars[handle][0]);
if (intv==0)
delete gto_vars[handle];
else
gto_vars[handle][1]=intv+gtc;
}
}
}
function gtoInterval(code,interval){
gto_id_cnt++;
var curr_id = "T"+gto_id_cnt;
gto_vars[curr_id] = new Array(code,interval+getTickCount(),interval);
return curr_id;
}
function gtoSet(code,interval){
gto_id_cnt++;
var curr_id = "T"+gto_id_cnt;
gto_vars[curr_id] = new Array(code,interval+getTickCount(),0);
return curr_id;
}
function gtoClear(handle){
if (gto_vars[handle])
delete gto_vars[handle];
}
function isFunction(x) {
return Object.prototype.toString.call(x) === "[object Function]";
}
function getTickCount(){
return (new Date().getTime());
}
Pada tag body bisa ditambahkan script berikut:
<body onload="gto_doInterval()">
Atau tambah pada window.onload
window.onload=gto_doInterval;
Penggunaan fungsi adalah sebagai berikut:
/* Pengganti setTimeout */
var tm=gtoSet(nama_fungsi,1000);
/* atau */
var tm=gtoSet("alert('test');",1000);
/* Pengganti setInterval */
var inv=gtoInterval(nama_fungsi,1000);
/* atau */
var inv=gtoInterval("alert('test interval')",1000);
/* Pengganti clearTimeout dan clearInterval */
gtoClear(tm);
gtoClear(inv);
var tm=gtoSet(nama_fungsi,1000);
/* atau */
var tm=gtoSet("alert('test');",1000);
/* Pengganti setInterval */
var inv=gtoInterval(nama_fungsi,1000);
/* atau */
var inv=gtoInterval("alert('test interval')",1000);
/* Pengganti clearTimeout dan clearInterval */
gtoClear(tm);
gtoClear(inv);
Semoga informasi ini berguna... 

Diposting pada : Selasa, 29 Juni 10 - 16:10 WIB
Dalam Kategori : JAASCRIPT, WEB, SETTIMEOUT, SETINTERVAL
Dibaca sebanyak : 5491 Kali
Rating : 1 Bagus, 0 Jelek
Tidak ada komentar pada blog ini...
Anda harus Login terlebih dahulu untuk mengirim komentar
Facebook Feedback