Вопрос 1:
outerPane
выбирается только один раз, независимо от любого другого значения.В закомментированных строках будет указана эта переменная.Суть его в том, что $(selector)
несколько раз всегда будет медленнее, если просто повторно использовать результат и вызывать его только один раз.Приведенный выше код всегда будет иметь переменную outerPane
везде, где это необходимо, и это будет очень быстро.
Вопрос 2:
Ну, этот код добрыйнеправильно.Позвольте мне исправить это:
var timer = null;
$(window).scroll(function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function() {
timer = null; // Added this line.
mycallback();
}, 100);
});
Смысл этого в том, чтобы выполнять ваш большой кусок JavaScript (в mycallback()
) только тогда, когда пользователь фактически прекратил прокрутку.mycallback()
будет вызываться только в том случае, если в течение 100 мс не произошло ни одного события прокрутки.
Поэтому, когда происходит прокрутка, сначала она проверяет, существует ли необработанное время ожидания, и есть ли его отмена.Это произойдет, если несколько событий прокрутки происходят на расстоянии менее 100 мс.Затем он устанавливает новый таймер для запуска через 100 мсек, который очистит timer
и сработает mycallback()
.
Это предотвращает запуск mycallback()
до тех пор, пока в течение 100 мс не произойдет никаких событий прокрутки.Преимущество состоит в том, что если mycallback()
занимает много времени, оно никогда не прервет плавную прокрутку браузера.
Однако в случае с Twitter (как объясняет Ресиг) этот подход не будет работать.В случае с Twitter им нужно перемещать объекты по экрану при каждом событии прокрутки, потому что они перемещают объекты на экране во время прокрутки.Таким образом, они нуждаются в таком расчете каждый раз, когда запускается событие прокрутки, чтобы окно выглядело правильно при прокрутке вниз.Но также, когда вы делаете это таким образом, вы должны убедиться, что ваш JS работает очень быстро, потому что он будет выполняться много раз, пока пользователь выполняет прокрутку (отсюда и объяснение кэширования элементов jQuery).