diff --git a/play.pokemonshowdown.com/js/client-teambuilder.js b/play.pokemonshowdown.com/js/client-teambuilder.js index 3c2fa70a1c..e309e5f85c 100644 --- a/play.pokemonshowdown.com/js/client-teambuilder.js +++ b/play.pokemonshowdown.com/js/client-teambuilder.js @@ -138,6 +138,8 @@ curFolder: '', curFolderKeep: '', curSearchVal: '', + // Debounce value for searching in the teambuilder + searchTimeout: null, exportMode: false, formatResources: {}, @@ -3239,11 +3241,24 @@ this.chartSet(val, selectNext); }, searchChange: function (e) { - // 91 for right CMD / 93 for left CMD / 17 for CTL - if (e.keyCode !== 91 && e.keyCode !== 93 && e.keyCode !== 17) { - this.curSearchVal = e.currentTarget.value; + var DEBOUNCE_THRESHOLD_TEAMS = 500; + function updateTeamList() { + // 91 for right CMD / 93 for left CMD / 17 for CTL + if (e.keyCode !== 91 && e.keyCode !== 93 && e.keyCode !== 17) { + this.curSearchVal = searchVal; + } this.updateTeamList(); } + + // If the user has a lot of teams, search is debounced to + // ensure this isn't called too frequently while typing + if (Storage.teams.length > DEBOUNCE_THRESHOLD_TEAMS) { + if (this.searchTimeout) clearTimeout(this.searchTimeout); + + var searchVal = e.currentTarget.value; + this.searchTimeout = setTimeout(updateTeamList.bind(this), 400); + } else updateTeamList(); + }, chartSetCustom: function (val) { val = toID(val);