Подход Джона Резига самый разумный. Событие прокрутки отправляется ALOT в большинстве современных браузеров. Для быстрого действия прокрутки по оси Y, равного 50 пикселям, его можно отправить 20-30 раз. Если у вас есть обработчик, вызываемый во время каждого из этих событий, вы заблокируете поток пользовательского интерфейса и прокручиваете его с рывками (как указывает Джон).
Кроме того, имейте в виду, что быстрая функция, выполняемая каждые 50 мс, не имеет большого значения в современных браузерах. Это вызов функции каждые 5 или 6 кадров. Чего вы пытаетесь избежать, так это вызова функций в каждом кадре, что происходит, если вы используете событие прокрутки.
Отредактированный
Извините, я пропустил этот комментарий, когда выложил первую версию (я искал в сообщении только имя MJ, а не комментарии). Ограничение скорости обработчиком scrollEvent - разумный подход +1. На самом деле он мне нравится больше, чем стратегия Ресига, потому что вы всегда получите первое событие прокрутки, когда это произойдет, а затем ограничите каждое событие прокрутки, выбрасываемое после него, максимум один раз за каждые 100 мс.
При подходе Resig вы можете отложить до 100 мсек, прежде чем ваш обратный вызов будет уведомлен о событии прокрутки. Задержка в 100 мс может восприниматься тяжелым пользователем как медленный интерфейс.