Skip to content

Instantly share code, notes, and snippets.

@nowri
Created May 4, 2012 10:56
Show Gist options
  • Save nowri/2594116 to your computer and use it in GitHub Desktop.
Save nowri/2594116 to your computer and use it in GitHub Desktop.
setIntervalOptimizer.js
// http://d.hatena.ne.jp/amachang/20060924/1159084608
// ここのやつがリンク切れしてたのでarchiveからもってきた
var _si_nativeSetInterval = setInterval;
var _si_nativeClearInterval = clearInterval;
var _si_intervalTime = 10;
var _si_counter = 1;
var _si_length = 0;
var _si_functions = {};
var _si_counters = {};
var _si_numbers = {};
var _si_intervalId = undefined;
var _si_loop = function() {
var f = _si_functions, c = _si_counters, n = _si_numbers;
for(var i in f) {
if(!--c[i]) {
f[i]();
c[i] = n[i];
}
}
};
setInterval = function(handler, time) {
if(typeof handler == 'string')
handler = new Function(handler);
_si_functions[_si_counter] = handler;
_si_counters[_si_counter] = _si_numbers[_si_counter] = Math.ceil(time / _si_intervalTime);
if (++_si_length && !_si_intervalId) {
_si_intervalId = _si_nativeSetInterval(_si_loop, _si_intervalTime);
}
return _si_counter++;
};
clearInterval = function(id) {
if(_si_functions[id]) {
delete _si_functions[id];
delete _si_numbers[id];
delete _si_counters[id];
if (!--_si_length && _si_intervalId) {
_si_nativeClearInterval(_si_intervalId);
_si_intervalId = undefined;
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment