Pull to refresh

Comments 15

но чтобы не грузить сервер запросами и не повторять рендер страницы с одинаковыми по значению данными, мы хотим обернуть запрос в дебаунсер с некоторым ограничением по времени

Кажется дебаунсер тут не поможет

в контексте отправки запросов при вводе в инпут - поможет )
вы уменьшаете количество отправляемых запросов - таким образом уменьшаете нагрузку на сервер,
а обрабатывая меньшее количество ответов - уменьшаете количество обновлений вашего компонента.
второе в целом не очень существенно прибавляет в производительности, если вы правильно мемоизируете компонент, который вы рендерите. но если представить, что у вас много таких компонентов на странице, я посчитал этот аргумент валидным

о том как дебаунсер увеличивает производительность ui можете посмотреть здесь:
https://css-tricks.com/debouncing-throttling-explained-examples/#aa-debounce

Предположим, при вводе текста в инпут мы хотим отправлять запрос на сервер, чтобы получить выпадающий список вариантов под введенное значение.

для данного применения достаточно просто ограничить первую отправку на сервер 3-4 символами. и реализовать разделение на группы пробелом, тогда на сервере логика выбора будет поле like %1группа% and поле like %2группа% и так далее. как правило редко приходится вбивать более 3-х групп для выборки аз 10 лямов записей - из практики применения. замыкания, конечно хорошо надо знать, но и применять надо по месту.

Если использовать не только в React, то вполне полезная функция.

Кстати, функция легко гуглится "function debounce(f, ms)", выдает компактный код и внятное объяснение.

Использую для сохранения последней выбранной записи, когда пользователь бегает по гриду.
Если сохранять каждый раз при переходе на запись - перегруз запросов. А если с задержкой в 2сек поесле последнего перехода - самое то.

useDererredValue() же не позволяет задавать задержку.

А вот так дебонс выглядит в $mol:

@act someAction() {
  sleep( 1000 )
  // do some work
}

Нет, не продаю, просто показываю.

В том-то и дело, что он не нужен. sleep вставляет задержку. Если тот же экшен вызывается до завершения предыдущего, то предыдущий прибивается автоматически.

А как sleep понимает где он вызван? У меня ж там разные могут быть методы со sleep

Так же как и хуки в реакте.

Для лучшего понимания тут бы наверное стоило или в таком виде задавать

@act 1000 someAction() {
  // do some work
}

или вот в таком

@act someAction() {
  debonce( 1000 )
  // do some work
}

Иначе, ИМХО, стороннему человеку этот код реально кажется непонятным

Sign up to leave a comment.

Articles