Вы дергаете браузер почем зря. Для того, чтобы отработал jQuer'евский
.width()
или
.height()
, нужно обратиться к DOM, тот вызовет reflow, после этого вернет значение.
Сравните:
var was = new Date();
var jDB = $(document.body);
for(var i=0; i<1000; i++){
jDB.width(); // здесь мы вызываем функцию замера
}
var now = new Date();
alert(now.getTime() - was.getTime() + " мс")
var was = new Date();
var jDB = $(document.body);
for(var i=0; i<1000; i++){
jDB.foo; // а тут читаем гипотетическую переменную foo
}
var now = new Date();
alert(now.getTime() - was.getTime() + " мс")
Кешируйте значения!
Если размер объекта не меняется, незачем мерять его 40 раз в секунду. Если размер окна изменится, Вы узнаете об этм через событие
resize
.