diff --git a/components/nav.tsx b/components/nav.tsx index a979387..4373faf 100644 --- a/components/nav.tsx +++ b/components/nav.tsx @@ -136,7 +136,9 @@ function DesktopDropdown({ {open && item.children ? (
{item.children.map((c) => ( !l.webOnly) : ALL_LINKS; + // The header carries no backdrop-blur, deliberately. It is `sticky`, so the + // content behind it changes on every scroll frame - which means a + // backdrop-filter has to re-sample and re-blur the full width of the viewport + // 60 times a second. On a 4K display that is ~3840px of blur per frame, and + // WebKitGTK (what the desktop app renders with) is markedly slower at it than + // Chromium. It was the largest single cause of scroll jank in the desktop + // app, and invisible in profiles taken at rest: idle cost was zero. + // + // An opaque background lands within a hair of the same look on a dark theme + // for no per-frame cost. Blur is still fine on surfaces that do not sit over + // moving content - the dropdown above only exists while it is open. return ( -
+
setOpen(false)}> {/* eslint-disable-next-line @next/next/no-img-element */}