Показать сообщение отдельно
  #3 (permalink)  
Старый 13.05.2010, 00:57
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Вы дергаете браузер почем зря. Для того, чтобы отработал 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.
Ответить с цитированием