perf: drop the render-blocking Font Awesome stylesheet - #124
Conversation
Font Awesome 4.7 was loaded from cdnjs on every page. It is render-blocking, and because it lives on a third origin the browser must do a DNS lookup and TLS handshake before it can paint — measured at ~480ms to first byte on a cold connection. Nothing uses it. There are no `fa-*` classes in this theme's components, and a sweep of all 27 pages of the lecture-python-programming preview build found zero occurrences in the rendered HTML. The library has also been end-of-life since 2016. The toolbar already uses lucide-react for its icons, which is bundled.
|
🎭 Visual regression resultsDetails
Skipped testsmobile-chrome › theme.spec.ts › QuantEcon theme — visual regression › launch-colab |
The point-in-time evidence (page counts, origin timing) lives in the PR description; the comment keeps only what the next reader needs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Verified locally before merge: zero One caveat for the record, since a static-HTML grep can't cover it: client-side-rendered ipywidgets emit |
Resolves the predicted adjacent-lines conflict with the Font Awesome removal (#124) in the links() array: both explanatory comments are kept, both third-party CDN <link> entries are dropped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…#132) release.yml builds a release's notes from that version's changelog section, so entries in the wrong place are silently dropped from the next release: - The git-history entry (#83, merged 2026-08-19) sat inside the already-tagged [2.2.0] (2026-07-16) section. Moved to [Unreleased] and given its missing PR link. - The two CDN-removal changes had no entries at all. Added under Changed (#125, self-hosted KaTeX + vendored jupyter-matplotlib) and Removed (#124, Font Awesome). Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Font Awesome 4.7 was loaded from cdnjs on every page. It is render-blocking, and because it sits on a third origin the browser must complete a DNS lookup and TLS handshake before it can paint — measured at roughly 480ms to first byte on a cold connection.
Nothing uses it:
fa-*classes anywhere in this theme's componentsThe library has also been end-of-life since 2016.
The toolbar already uses
lucide-react, which is bundled, so an icon set is available if one is ever needed again. A comment at the removal site records this.Context
Found while tracing the load-time flash in the contents sidebar (#123). The critical path on that preview build carried six render-blocking stylesheets across three origins; this removes one origin entirely.
Note for merge order
This and the KaTeX self-hosting branch (#125) both delete adjacent entries from the same
links()array, so whichever merges second will show a trivial conflict. The resolution is to keep both explanatory comments and drop both<link>entries.