mirror of
https://github.com/zulip/zulip.git
synced 2025-11-13 18:36:36 +00:00
filter: Cache/store sorted_term_types.
Given that the sorted term types depends only on the filter, it makes sense to only build them once and cache the results.
This commit is contained in:
@@ -1179,10 +1179,31 @@ run_test('term_type', () => {
|
|||||||
{operator: 'sender', operand: 'steve@foo.com'},
|
{operator: 'sender', operand: 'steve@foo.com'},
|
||||||
{operator: 'stream', operand: 'Verona'},
|
{operator: 'stream', operand: 'Verona'},
|
||||||
];
|
];
|
||||||
const filter = new Filter(terms);
|
let filter = new Filter(terms);
|
||||||
const term_types = filter.sorted_term_types();
|
const term_types = filter.sorted_term_types();
|
||||||
|
|
||||||
assert.deepEqual(term_types, ['stream', 'topic', 'sender']);
|
assert.deepEqual(term_types, ['stream', 'topic', 'sender']);
|
||||||
|
|
||||||
|
// test caching of term types
|
||||||
|
// init and stub
|
||||||
|
filter = new Filter(terms);
|
||||||
|
filter.stub = filter._build_sorted_term_types;
|
||||||
|
filter._build_sorted_term_types = function () {
|
||||||
|
this._build_sorted_term_types_called = true;
|
||||||
|
return this.stub();
|
||||||
|
};
|
||||||
|
|
||||||
|
// uncached trial
|
||||||
|
filter._build_sorted_term_types_called = false;
|
||||||
|
const built_terms = filter.sorted_term_types();
|
||||||
|
assert.deepEqual(built_terms, ['stream', 'topic', 'sender']);
|
||||||
|
assert(filter._build_sorted_term_types_called);
|
||||||
|
|
||||||
|
// cached trial
|
||||||
|
filter._build_sorted_term_types_called = false;
|
||||||
|
const cached_terms = filter.sorted_term_types();
|
||||||
|
assert.deepEqual(cached_terms, ['stream', 'topic', 'sender']);
|
||||||
|
assert(!filter._build_sorted_term_types_called);
|
||||||
});
|
});
|
||||||
|
|
||||||
run_test('first_valid_id_from', () => {
|
run_test('first_valid_id_from', () => {
|
||||||
|
|||||||
@@ -502,6 +502,13 @@ Filter.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
sorted_term_types: function () {
|
sorted_term_types: function () {
|
||||||
|
if (this._sorted_term_types === undefined) {
|
||||||
|
this._sorted_term_types = this._build_sorted_term_types();
|
||||||
|
}
|
||||||
|
return this._sorted_term_types;
|
||||||
|
},
|
||||||
|
|
||||||
|
_build_sorted_term_types: function () {
|
||||||
const terms = this._operators;
|
const terms = this._operators;
|
||||||
const term_types = terms.map(Filter.term_type);
|
const term_types = terms.map(Filter.term_type);
|
||||||
const sorted_terms = Filter.sorted_term_types(term_types);
|
const sorted_terms = Filter.sorted_term_types(term_types);
|
||||||
|
|||||||
Reference in New Issue
Block a user