Skip to content

Commit 85d6324

Browse files
Add debounce to search
This makes the UI feel far less laggy while typing in a search query. It avoids applying redundant searches, which can easily add up to ~150ms per character on an older device or mobile phone.
1 parent b71c13c commit 85d6324

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

js/main.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,15 @@ $('#project-list').
33
css({visibility: 'visible'});
44
$('footer').css({visibility: 'visible'});
55

6-
$('#search-query').on('change keyup paste input', function(event) {
7-
var query = $.trim(event.target.value.toLowerCase());
6+
function debounce(f, wait){
7+
var timeout;
8+
return function(...args) {
9+
clearTimeout(timeout);
10+
timeout = setTimeout(() => f(...args), wait)
11+
};
12+
};
13+
14+
function filterProjectsBySearch(query){
815
var projects = $('#project-list li');
916
if (query == '') {
1017
projects.show();
@@ -13,6 +20,13 @@ $('#search-query').on('change keyup paste input', function(event) {
1320
}
1421
$('#project-list .category').show().not(':has(li:visible)').hide();
1522
$('#project-list').masonry('layout');
23+
}
24+
25+
var debouncedSearch = debounce(filterProjectsBySearch, 100);
26+
27+
$('#search-query').on('change keyup paste input', function(event) {
28+
var query = $.trim(event.target.value.toLowerCase());
29+
debouncedSearch(query)
1630
});
1731

1832
$('#search-query').focus().change();

0 commit comments

Comments
 (0)