From b1ee5c8738d6aac06ab78c8b7362454ce1cbe14d Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Mon, 2 Oct 2023 21:31:20 +0200 Subject: [PATCH] LibWeb: Implement CSS fonts lazy loading By loading only the fonts actually used on a page, we can often avoid making a lot of unnecessary requests and style invalidations. This change makes initial loading of apple.com much faster. Fixes https://github.com/SerenityOS/serenity/issues/20747 --- Userland/Libraries/LibWeb/CSS/StyleComputer.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index fc27595cd9..a111bc1923 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -96,7 +96,6 @@ public: , m_family_name(move(family_name)) , m_urls(move(urls)) { - start_loading_next_url(); } virtual ~FontLoader() override { } @@ -114,10 +113,12 @@ public: { } - RefPtr font_with_point_size(float point_size) const + RefPtr font_with_point_size(float point_size) { - if (!m_vector_font) + if (!m_vector_font) { + start_loading_next_url(); return nullptr; + } if (auto it = m_cached_fonts.find(point_size); it != m_cached_fonts.end()) return it->value; @@ -136,6 +137,8 @@ public: private: void start_loading_next_url() { + if (resource() && resource()->is_pending()) + return; if (m_urls.is_empty()) return; LoadRequest request;