From 705f15aadd33d09fab835aaa937d460d1225e43c Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Thu, 21 Mar 2019 11:19:20 -0400 Subject: [PATCH] Speed up search by cacheing preset text values and not scrolling to focused node as often --- modules/presets/preset.js | 9 ++++++++- modules/ui/search_add.js | 16 ++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/modules/presets/preset.js b/modules/presets/preset.js index 79c7950fa..746377ed9 100644 --- a/modules/presets/preset.js +++ b/modules/presets/preset.js @@ -128,9 +128,16 @@ export function presetPreset(id, preset, fields, visible, rawPresets) { return score; }; + var _textCache = {}; preset.t = function(scope, options) { - return t('presets.presets.' + id + '.' + scope, options); + var textID = 'presets.presets.' + id + '.' + scope; + + if (_textCache[textID]) return _textCache[textID]; + + var text = t(textID, options); + _textCache[textID] = text; + return text; }; diff --git a/modules/ui/search_add.js b/modules/ui/search_add.js index 8c2be0f32..c806fdbb6 100644 --- a/modules/ui/search_add.js +++ b/modules/ui/search_add.js @@ -230,7 +230,7 @@ export function uiSearchAdd(context) { } } if (!nextFocus.empty()) { - focusListItem(nextFocus); + focusListItem(nextFocus, true); priorFocus.classed('focused', false); } @@ -253,7 +253,7 @@ export function uiSearchAdd(context) { } } if (!nextFocus.empty()) { - focusListItem(nextFocus); + focusListItem(nextFocus, true); priorFocus.classed('focused', false); } } @@ -282,17 +282,21 @@ export function uiSearchAdd(context) { popover.selectAll('.list .list-item.focused') .classed('focused', false); - focusListItem(popover.selectAll('.list > .list-item:first-child')); + focusListItem(popover.selectAll('.list > .list-item:first-child'), false); + + popoverContent.node().scrollTop = 0; var resultCount = results.length; message.text(t('modes.add_feature.' + (resultCount === 1 ? 'result' : 'results'), { count: resultCount })); } - function focusListItem(selection) { + function focusListItem(selection, scrollingToShow) { if (!selection.empty()) { selection.classed('focused', true); - // scroll to keep the focused item visible - scrollPopoverToShow(selection); + if (scrollingToShow) { + // scroll to keep the focused item visible + scrollPopoverToShow(selection); + } } }