Comments 28
очень полезно. спасибо
-1
Актуальная информация:
данные методы находятся в реализации JS библиотеки ladsh
https://lodash.com/docs/4.17.4#debounce
данные методы находятся в реализации JS библиотеки ladsh
https://lodash.com/docs/4.17.4#debounce
0
Для задания контекста используется https://lodash.com/docs/4.17.4#bind
0
Спасибо. Полезные сведения и примеры отличные.
0
Круто, код становится прекрасным — обожаю JS :)
+3
Идеи хорошие, паттерны — они такие, воздушные, казалось бы очевидные ;)
Но вот можно было сделать реализацию на чистом js. Без этого пустовато.
Но вот можно было сделать реализацию на чистом js. Без этого пустовато.
0
Вероятно, было бы удобней реализовать в виде $(selector). debounceBind(type, data, fn), и в data подавать параметр задержки.
Кстати, код можно оформить и по jsDoc.
Не удалось адекватно повесить биндер на $.ajax.success, правда, задача не совсем жизненная: )
В целом реализация хорошая. Спасибо.
Кстати, код можно оформить и по jsDoc.
Не удалось адекватно повесить биндер на $.ajax.success, правда, задача не совсем жизненная: )
В целом реализация хорошая. Спасибо.
0
debounce и bind могут применяться не только для обработчиков событий, поэтому делать debounceBind было бы странным. debounceBind может быть надстройкой над debounce.
А что у вас именно не получилось с $.ajax.success?
А что у вас именно не получилось с $.ajax.success?
0
Ну если нас интересует отслеживание выполнения функции в определенный период времени, то здесь имеет место быть контекст событийности.
Не получилось реализовать чтото вроде:
var onload = function(_e) {
console.log('loaded');
};
var test = function() {
$.ajax({
'url': 'http://myhost/blablabla',
'success': $.debounce(onload, 1000)
})
}
Если повесить test() на onClick кнопки, то функция будет выполняться каждый раз с этой задержкой, без фильтрации. Пример возник из невнятной идеи: запрос отправляется постоянно по событию а апдейт dom например происходит не чаще чем какойто интервал времени.
Не получилось реализовать чтото вроде:
var onload = function(_e) {
console.log('loaded');
};
var test = function() {
$.ajax({
'url': 'http://myhost/blablabla',
'success': $.debounce(onload, 1000)
})
}
Если повесить test() на onClick кнопки, то функция будет выполняться каждый раз с этой задержкой, без фильтрации. Пример возник из невнятной идеи: запрос отправляется постоянно по событию а апдейт dom например происходит не чаще чем какойто интервал времени.
0
Потому что на каждый клик у вас создается новый экземпляр задекорированной функции. Надо сделать так:
var onload = $.debounce(function(_e) {
console.log('loaded');
}, 1000);
var test = function() {
$.ajax({
'url': 'http://myhost/blablabla',
'success': onload
})
};
* This source code was highlighted with Source Code Highlighter.
+2
Примеры хорошие, но было бы интересней иметь библиотеку манипуляции функциями — функции before/after, кэширование (которое зачем-то назвали debounce), может что-то ещё кому в голову придёт?
-1
Может, стоит перенести в блог jQuery? Когда я начал читать, удивился, подумав что это реализовано в
джаваскрипте по умолчанию, только ближе к концу стало очевидно, что это реализовано в виде плагина к jQuery.
За статью спасибо, пригодиться в новом проекте.
джаваскрипте по умолчанию, только ближе к концу стало очевидно, что это реализовано в виде плагина к jQuery.
За статью спасибо, пригодиться в новом проекте.
0
Написанное в статье справедливо для Javascript'а в целом, а не jQuery. Сам плагин легко переписывается без jQuery.
0
В коде вообще ничего нет от jQuery кроме того, что вы функции положили в его неймспейс. :) Поэтому не вижу никакого смысла оформлять это как плагин для jQuery.
0
Мой вариант debouncing: habrahabr.ru/blogs/webdev/17884/ (не знал тогда, что это так называется :)
0
Поздравляю, вы только что переизобрели несколько комбинаторов из Flapjax (flapjax-lang.org):
— blindE (аналог debounce)
— calmE (аналог throttle)
Только вот Flapjax основан на мощной теоретической базе, и реализация довольно продвинутая.
— blindE (аналог debounce)
— calmE (аналог throttle)
Только вот Flapjax основан на мощной теоретической базе, и реализация довольно продвинутая.
-7
Автор ничего не изобретал, он же пишет: «Навеяно книжкой Николаса Закаса».
А реализация модуля по мотивам удобного паттерна в различных библиотеках — только плюс разработчикам.
А реализация модуля по мотивам удобного паттерна в различных библиотеках — только плюс разработчикам.
+2
Я ничего не изобретал, я сделал свою жизнь, с точки зрения веб-разработчика немного проще и написал об этом. Если у вас мощная теоретическая база для этого — написали бы, я бы с удовольствием почитал.
0
отлично. полезно… декораторы за частую развязывают руки…
0
спасибо, вы мне много времени сэкономили
0
Поддерживаю. Статье пять лет, а актуальность сохраняется. Столкнулся с описанной задачей, а ничего более свежего и доступного не нашел.
Под впечатлением от сабжа, сделал свою версию: github.com/lolmaus/jquery.timer-tools
Отличия от сабжа:
— Изменен порядок аргументов. Колбэк теперь идет последним, что гораздо удобнее (см. примеры).
— Добавлена функция delay — алиас для setTimeout с измененным порядком аргументов.
— Debounce с исполнением колбэка в начале или в конце серии вызовов разделен на две отдельные функции.
— Код throttle упрощен. Автор сабжа там перемудрил.
— Плагин досутпен через Bower.
Под впечатлением от сабжа, сделал свою версию: github.com/lolmaus/jquery.timer-tools
Отличия от сабжа:
— Изменен порядок аргументов. Колбэк теперь идет последним, что гораздо удобнее (см. примеры).
— Добавлена функция delay — алиас для setTimeout с измененным порядком аргументов.
— Debounce с исполнением колбэка в начале или в конце серии вызовов разделен на две отдельные функции.
— Код throttle упрощен. Автор сабжа там перемудрил.
— Плагин досутпен через Bower.
0
Sign up to leave a comment.
Микропаттерны оптимизации в Javascript: декораторы функций debouncing и throttling