Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6ef0bfd

Browse files
rustdoc-search: improve concurrency at type search
1 parent 0becce4 commit 6ef0bfd

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

‎src/librustdoc/html/static/js/search.js

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4031,7 +4031,11 @@ class DocSearch {
40314031
return empty_postings_list;
40324032
}
40334033
const typeFilter = itemTypeFromName(elem.typeFilter);
4034-
const searchResults = await index.search(elem.normalizedPathLast);
4034+
const [searchResults, upla, uplb] = await Promise.all([
4035+
index.search(elem.normalizedPathLast),
4036+
unpackPostingsListAll(elem.generics, polarity),
4037+
unpackPostingsListBindings(elem.bindings, polarity),
4038+
]);
40354039
/**
40364040
* @type {Promise<[
40374041
* number,
@@ -4196,8 +4200,6 @@ class DocSearch {
41964200
})) {
41974201
continue;
41984202
}
4199-
const upla = await unpackPostingsListAll(elem.generics, polarity);
4200-
const uplb = await unpackPostingsListBindings(elem.bindings, polarity);
42014203
for (const {invertedIndex: genericsIdx, queryElem: generics} of upla) {
42024204
for (const {invertedIndex: bindingsIdx, queryElem: bindings} of uplb) {
42034205
results.push({
@@ -4303,19 +4305,23 @@ class DocSearch {
43034305
queryElem: new Map(),
43044306
}];
43054307
}
4306-
const firstKeyIds = await index.search(firstKey);
4308+
// HEADS UP!
4309+
// We must put this map back the way we found it before returning,
4310+
// otherwise things break.
4311+
elems.delete(firstKey);
4312+
const [firstKeyIds, firstPostingsList, remainingAll] = await Promise.all([
4313+
index.search(firstKey),
4314+
unpackPostingsListAll(firstList, polarity),
4315+
unpackPostingsListBindings(elems, polarity),
4316+
]);
43074317
if (!firstKeyIds) {
4318+
elems.set(firstKey, firstList);
43084319
// User specified a non-existent key.
43094320
return [{
43104321
invertedIndex: empty_inverted_index,
43114322
queryElem: new Map(),
43124323
}];
43134324
}
4314-
elems.delete(firstKey);
4315-
const [firstPostingsList, remainingAll] = await Promise.all([
4316-
unpackPostingsListAll(firstList, polarity),
4317-
unpackPostingsListBindings(elems, polarity),
4318-
]);
43194325
/** @type {PostingsList<Map<number, rustdoc.QueryElement[]>>[]} */
43204326
const results = [];
43214327
for (const keyId of firstKeyIds.matches().entries()) {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /