rustdoc: optimize loading of source sidebar
The source sidebar has a setting to remember whether it should be open or closed. Previously, this setting was handled in source-script.js, which is loaded with `defer`, meaning it is often run after the document is rendered. Since CSS renders the source sidebar as closed by default, changing this after the initial render results in a relayout. Instead, handle the setting in storage.js, which is the first script to load and is the only script that blocks render. This avoids a relayout and means navigating between files with the sidebar open is faster.
This commit is contained in:
parent
bb8c2f4117
commit
b37a05bd01
5 changed files with 42 additions and 26 deletions
|
@ -1,3 +1,8 @@
|
|||
// storage.js is loaded in the `<head>` of all rustdoc pages and doesn't
|
||||
// use `async` or `defer`. That means it blocks further parsing and rendering
|
||||
// of the page: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script.
|
||||
// This makes it the correct place to act on settings that affect the display of
|
||||
// the page, so we don't see major layout changes during the load of the page.
|
||||
"use strict";
|
||||
|
||||
const darkThemes = ["dark", "ayu"];
|
||||
|
@ -236,6 +241,12 @@ if (getSettingValue("use-system-theme") !== "false" && window.matchMedia) {
|
|||
switchToSavedTheme();
|
||||
}
|
||||
|
||||
if (getSettingValue("source-sidebar-show") === "true") {
|
||||
// At this point in page load, `document.body` is not available yet.
|
||||
// Set a class on the `<html>` element instead.
|
||||
addClass(document.documentElement, "source-sidebar-expanded");
|
||||
}
|
||||
|
||||
// If we navigate away (for example to a settings page), and then use the back or
|
||||
// forward button to get back to a page, the theme may have changed in the meantime.
|
||||
// But scripts may not be re-loaded in such a case due to the bfcache
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue