diff options
| author | Niklas Baumstark | 2012-01-25 22:32:08 +0100 |
|---|---|---|
| committer | Niklas Baumstark | 2012-04-10 23:58:08 +0200 |
| commit | 0ab64a092def03ccd462802f040d83ce2911ea1e (patch) | |
| tree | 88a3bf9cd6ab24b3cd90c19d6c14aa3fcfb95e68 /fuzzyMode.js | |
| parent | f7f40e3dc9ad17618e8b485b061e958b7338c486 (diff) | |
| download | vimium-0ab64a092def03ccd462802f040d83ce2911ea1e.tar.bz2 | |
really only update every X milliseconds
Diffstat (limited to 'fuzzyMode.js')
| -rw-r--r-- | fuzzyMode.js | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/fuzzyMode.js b/fuzzyMode.js index a2ff7dc5..2a9b4601 100644 --- a/fuzzyMode.js +++ b/fuzzyMode.js @@ -75,8 +75,7 @@ var fuzzyMode = (function() { reset: function() { this.query = ''; - // query used to filter the last completion result. We need this for asynchronous updating - this.lastQuery = null; + this.updateTimer = null; this.completions = []; this.selection = 0; // force synchronous updating so that the old results will not be flash up shortly @@ -121,8 +120,7 @@ var fuzzyMode = (function() { // refresh with F5 else if (keyChar == 'f5') { this.completer.refresh(); - this.lastQuery = null; - this.update(); + this.update(true); // force synchronous update } // use primary action with Enter. Holding down Shift/Ctrl uses the alternative action @@ -150,6 +148,7 @@ var fuzzyMode = (function() { updateCompletions: function() { var self = this; + var start = Date.now(); this.completer.filter(this.query, this.maxResults, function(completions) { self.completions = completions; @@ -157,6 +156,7 @@ var fuzzyMode = (function() { self.completionList.innerHTML = completions.map(function(completion) { return '<li>' + completion.html + '</li>'; }).join(''); + console.log("total update time: " + (Date.now() - start)); self.completionList.style.display = self.completions.length > 0 ? 'block' : 'none'; self.updateSelection(); @@ -170,16 +170,20 @@ var fuzzyMode = (function() { this.input.textContent = this.query; if (sync) { + // cancel scheduled update + if (this.updateTimer !== null) + window.clearTimeout(this.updateTimer); this.updateCompletions(); + } else if (this.updateTimer !== null) { + // an update is already scheduled, don't do anything + return; } else { var self = this; // always update asynchronously for better user experience and to take some load off the CPU // (not every keystroke will cause a dedicated update) - setTimeout(function() { - if (self.query === self.lastQuery) - return; - self.lastQuery = self.query; + this.updateTimer = setTimeout(function() { self.updateCompletions(); + self.updateTimer = null; }, this.refreshInterval); } }, @@ -201,8 +205,8 @@ var fuzzyMode = (function() { // public interface return { - activateAll: function() { start('all', false, 300); }, - activateAllNewTab: function() { start('all', true, 300); }, + activateAll: function() { start('all', false, 100); }, + activateAllNewTab: function() { start('all', true, 100); }, activateTabs: function() { start('tabsSorted', false, 0); }, } |
