mirror of https://github.com/zulip/zulip.git
refactor: Extract finalize_results.
This has a few benefits: - we remove some duplicate code - we can see finalize_results in profiles It turns out finalize_results is expensive for some searches. If the search itself doesn't do a ton of work but returns a lot of results, we see it in finalize_results. It brings to attention that we should be truncating items earlier instead of doing lots of unnecessary work.
This commit is contained in:
parent
4141abc171
commit
09326cb467
|
@ -565,12 +565,7 @@ function attach_suggestions(result, base, suggestions) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.get_suggestions = function (base_query, query) {
|
exports.get_search_result = function (base_query, query) {
|
||||||
// This method works in tandem with the typeahead library to generate
|
|
||||||
// search suggestions. If you want to change its behavior, be sure to update
|
|
||||||
// the tests. Its API is partly shaped by the typeahead library, which wants
|
|
||||||
// us to give it strings only, but we also need to return our caller a hash
|
|
||||||
// with information for subsequent callbacks.
|
|
||||||
let result = [];
|
let result = [];
|
||||||
let suggestion;
|
let suggestion;
|
||||||
let suggestions;
|
let suggestions;
|
||||||
|
@ -682,32 +677,10 @@ exports.get_suggestions = function (base_query, query) {
|
||||||
attach_suggestions(result, base, suggestions);
|
attach_suggestions(result, base, suggestions);
|
||||||
|
|
||||||
result = result.concat(suggestions);
|
result = result.concat(suggestions);
|
||||||
|
return result;
|
||||||
_.each(result, function (sug) {
|
|
||||||
const first = sug.description.charAt(0).toUpperCase();
|
|
||||||
sug.description = first + sug.description.slice(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Typeahead expects us to give it strings, not objects, so we maintain our own hash
|
|
||||||
// back to our objects, and we also filter duplicates here.
|
|
||||||
const lookup_table = {};
|
|
||||||
const unique_suggestions = [];
|
|
||||||
_.each(result, function (obj) {
|
|
||||||
if (!lookup_table[obj.search_string]) {
|
|
||||||
lookup_table[obj.search_string] = obj;
|
|
||||||
unique_suggestions.push(obj);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const strings = _.map(unique_suggestions, function (obj) {
|
|
||||||
return obj.search_string;
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
strings: strings,
|
|
||||||
lookup_table: lookup_table,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.get_suggestions_legacy = function (query) {
|
exports.get_search_result_legacy = function (query) {
|
||||||
// This method works in tandem with the typeahead library to generate
|
// This method works in tandem with the typeahead library to generate
|
||||||
// search suggestions. If you want to change its behavior, be sure to update
|
// search suggestions. If you want to change its behavior, be sure to update
|
||||||
// the tests. Its API is partly shaped by the typeahead library, which wants
|
// the tests. Its API is partly shaped by the typeahead library, which wants
|
||||||
|
@ -805,7 +778,20 @@ exports.get_suggestions_legacy = function (query) {
|
||||||
|
|
||||||
suggestions = get_operator_subset_suggestions(operators);
|
suggestions = get_operator_subset_suggestions(operators);
|
||||||
result = result.concat(suggestions);
|
result = result.concat(suggestions);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.get_suggestions_legacy = function (query) {
|
||||||
|
const result = exports.get_search_result_legacy(query);
|
||||||
|
return exports.finalize_search_result(result);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.get_suggestions = function (base_query, query) {
|
||||||
|
const result = exports.get_search_result(base_query, query);
|
||||||
|
return exports.finalize_search_result(result);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.finalize_search_result = function (result) {
|
||||||
_.each(result, function (sug) {
|
_.each(result, function (sug) {
|
||||||
const first = sug.description.charAt(0).toUpperCase();
|
const first = sug.description.charAt(0).toUpperCase();
|
||||||
sug.description = first + sug.description.slice(1);
|
sug.description = first + sug.description.slice(1);
|
||||||
|
|
Loading…
Reference in New Issue