Shaos wrote:P.S. Потом сделаю генерацию анонимной функции в $W.start() через eval - будет чуток быстрее...
Сделал, но через Function (eval не работал в IE8):
Code: Select all
$W.start = function() {
var p = arguments[0]; // percentage
if(p==null) p=16; // 0.8 duty
else p=p/5; // for 20 ms
this.stop();
var sf = "var t=+new Date;";
for(var t in $W.threads) {
sf += "var t"+t+"=$W.threads["+t+"];";
}
sf += "while(+new Date-t<"+p+"){";
var i,j=0;
while(j<100) {
for(var t in $W.threads) {
for(i=0;i<$W.threads[t].p;i++) {
sf += "t"+t+".a=t"+t+".f[t"+t+".a](t"+t+".o);";
j++;
}
}
}
sf += "}";
this.started = setInterval(Function(sf),20);
}
На линуксовых машинах FireFox делает 7 миллинов вызовов в секунду.
На виндовой машине - только 4 миллиона, а вот Chrome - все 14 (а через eval было аж 17

)
Opera - 7 миллионов
Safari - 3 миллиона
IE8 - только 200 тысяч...
P.S. На рабочем линуксовом компьютере около 8 миллионов FireFox делает, WebKit-браузер Epiphany делает 5 миллионов, а Konqueror только 750 тысяч
P.P.S. Предыдущий метод при больших приоритетах тоже даёт неплохие результаты, но трюковый метод всё-равно чуть быстрее...
P.P.P.S. Так как это у нас
Threaded Code (шитый код), я решил переименовать новые функции Webitable:
$W.add -> $W.threaded_new
$W.del -> $W.threaded_delete
$W.fun -> $W.threaded_code
$W.pri -> $W.threaded_priority
$W.start -> $W.threaded_start
$W.stop -> $W.threaded_stop