IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

複雑で重くなった JavaScript を超高速化する方法。

以下のスクリプトを他のすべてのスクリプトよりも前に読み込む。

var nativeSetInterval = window.setInterval;

_setInterval = {};

window.setInterval = function(process, delay) {
	var entry;

	if(typeof process == 'string') {
		entry = new _setInterval.Entry(function(){eval(process);}, delay);
	}
	else if(typeof process == 'function') {
		entry = new _setInterval.Entry(process, delay);
	}
	else {
		throw Error('第一引数が不正です。');
	}

	var id = _setInterval.queue.length;
	_setInterval.queue[id] = entry
	return id;
};

window.clearInterval = function(id) {
	_setInterval.queue[id].loop = function(){};
};

_setInterval.queue = [];

_setInterval.Entry = function(process, delay) {
	this.process = process;
	this.delay   = delay;
	this.time    = 0;
};

_setInterval.Entry.prototype.loop = function(time) {
	this.time += time;
	while(this.time >= this.delay) {
		this.process();
		this.time -= this.delay
	}
};

_setInterval.lastTime = new Date().getTime();

nativeSetInterval(function() {
	
	var time = new Date().getTime();
	
	var subTime =  time - _setInterval.lastTime;

	_setInterval.lastTime = time;

	for(var i = 0; i < _setInterval.queue.length; i++) {
		_setInterval.queue[i].loop(subTime);
	}

}, 10);

ある重いページで CPU 使用率が 1/3 になりました。このスクリプトを使う場合は必ずコメントください。

最新はこっちです

id:amachang:20060924:1159084608