Skip to content

Commit

Permalink
Unrolled build for rust-lang#127379
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#127379 - notriddle:notriddle/decode, r=GuillaumeGomez

rustdoc-search: stop constructing pointless arrays in decode

I'm not sure why I ever thought that would be okay. This is clearly hot code, and should avoid Array.prototype.map when it's not needed. In any case, it shows up in the profiler.

rustdoc-js-profiler:
https://notriddle.com/rustdoc-html-demo-11/decode-opt-1/index.html

Firefox profiler:
[Before](https://share.firefox.dev/3RRH2fR)
[After](https://share.firefox.dev/3Wblcq8)
  • Loading branch information
rust-timer authored Jul 6, 2024
2 parents 28cc0b6 + fbb6300 commit 9211350
Showing 1 changed file with 7 additions and 11 deletions.
18 changes: 7 additions & 11 deletions src/librustdoc/html/static/js/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -3293,10 +3293,9 @@ ${item.displayPath}<span class="${type}">${name}</span>\
}
// call after consuming `{`
decodeList() {
const cb = "}".charCodeAt(0);
let c = this.string.charCodeAt(this.offset);
const ret = [];
while (c !== cb) {
while (c !== 125) { // 125 = "}"
ret.push(this.decode());
c = this.string.charCodeAt(this.offset);
}
Expand All @@ -3305,14 +3304,13 @@ ${item.displayPath}<span class="${type}">${name}</span>\
}
// consumes and returns a list or integer
decode() {
const [ob, la] = ["{", "`"].map(c => c.charCodeAt(0));
let n = 0;
let c = this.string.charCodeAt(this.offset);
if (c === ob) {
if (c === 123) { // 123 = "{"
this.offset += 1;
return this.decodeList();
}
while (c < la) {
while (c < 96) { // 96 = "`"
n = (n << 4) | (c & 0xF);
this.offset += 1;
c = this.string.charCodeAt(this.offset);
Expand All @@ -3325,15 +3323,14 @@ ${item.displayPath}<span class="${type}">${name}</span>\
}
next() {
const c = this.string.charCodeAt(this.offset);
const [zero, ua, la] = ["0", "@", "`"].map(c => c.charCodeAt(0));
// sixteen characters after "0" are backref
if (c >= zero && c < ua) {
if (c >= 48 && c < 64) { // 48 = "0", 64 = "@"
this.offset += 1;
return this.backrefQueue[c - zero];
return this.backrefQueue[c - 48];
}
// special exception: 0 doesn't use backref encoding
// it's already one character, and it's always nullish
if (c === la) {
if (c === 96) { // 96 = "`"
this.offset += 1;
return this.cons(0);
}
Expand Down Expand Up @@ -3472,7 +3469,6 @@ ${item.displayPath}<span class="${type}">${name}</span>\
searchIndex = [];
searchIndexDeprecated = new Map();
searchIndexEmptyDesc = new Map();
const charA = "A".charCodeAt(0);
let currentIndex = 0;
let id = 0;

Expand Down Expand Up @@ -3639,7 +3635,7 @@ ${item.displayPath}<span class="${type}">${name}</span>\
// object defined above.
const row = {
crate,
ty: itemTypes.charCodeAt(i) - charA,
ty: itemTypes.charCodeAt(i) - 65, // 65 = "A"
name: itemNames[i],
path,
descShard,
Expand Down

0 comments on commit 9211350

Please sign in to comment.