Skip to content

Commit

Permalink
Merge pull request #1419 from shockey/ft/1311-autocomplete-performanc…
Browse files Browse the repository at this point in the history
…e-switching

Implement 100ms cutoff point for Live Autocomplete
  • Loading branch information
shockey committed Jul 28, 2017
2 parents a149af9 + 7c54720 commit dac80e7
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 4 deletions.
4 changes: 2 additions & 2 deletions dist/swagger-editor.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/validation.worker.js

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions src/plugins/editor-autosuggest/helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
export function wrapCompleters(completers, cutoff = 100) {
let isLiveCompletionDisabled = false
let lastSpeeds = []
let isPerformant = () => lastSpeeds.every(speed => speed < cutoff)

if(cutoff === 0 || cutoff === "0") {
// never disable live autocomplete
return completers
}

return completers.map((completer, i) => {
let ori = completer.getCompletions
completer.getCompletions = function(editor, session, pos, prefix, callback) {
let startTime = Date.now()
ori(editor, session, pos, prefix, (...args) => {
let msElapsed = Date.now() - startTime
lastSpeeds[i] = msElapsed

if(isLiveCompletionDisabled && isPerformant()) {
console.warn("Manual autocomplete was performant - re-enabling live autocomplete")
editor.setOptions({
enableLiveAutocompletion: true
})
isLiveCompletionDisabled = false
}

if(msElapsed > cutoff && editor.getOption("enableLiveAutocompletion")) {
console.warn("Live autocomplete is slow - disabling it")
editor.setOptions({
enableLiveAutocompletion: false
})
isLiveCompletionDisabled = true
}

callback(...args)
})
}
return completer
})
}
6 changes: 5 additions & 1 deletion src/plugins/editor-autosuggest/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import * as actions from "./actions"
import * as fn from "./fn"
import * as specSelectors from "./spec-selectors"
import { wrapCompleters } from "./helpers"

export default function EditorAutosuggestPlugin() {
return {
Expand All @@ -22,7 +23,10 @@ export default function EditorAutosuggestPlugin() {
sys.editorActions.enableAutocompletions(context)

// Add completers ( for autosuggestions )
editor.completers = sys.editorActions.addAutosuggestionCompleters(context)
const completers = sys.editorActions.addAutosuggestionCompleters(context)
const cutoff = sys.getConfigs().liveAutocompleteCutoff
const wrappedCompleters = wrapCompleters(completers || [], cutoff)
editor.completers = wrappedCompleters
return
}
}
Expand Down

0 comments on commit dac80e7

Please sign in to comment.