q-#`YThhq4ZdEKy+LttoZ1NM6k}3S
zeYrEzRxi2LmiiZEBzzEbs@*s_PQ~rm(GI7^g8jIhLfOH+$o_MgbbV<2Co>JoMzM3~
za(gRF$Z`*pB=o?7ayZ}nI<)ANIx0CH8+fB>kt)mNgAsse8Yonzx#5)|-wSVP>R996
zA>Bx%wp9n%oT@ji0Gl5yO`vk8Sq>{J7j@32zHTWmkFpQfyGL!S8|Nsn5=}MB-&%FQ
z*4tN@yzIl;$D7gWj4{IeA(dDXvpze{OIPZVcglm>x(fSn;^c0&{9ph862Jfe003z4
zBSI=-KU#l|U`2@Hkf9ycpo>{bC^a__8TmWZ>`z%Xl8=KippZy_xlP@^9^wWqmH
zcPd>3H`1%{UR$Piz^z1CjWEyv(t`uR6fHra<8{@
zJI)OaleJTBJlkzVS}$z|3S6g9tHv`!IoeL_1R6;Xv{#+&(!c{Rh4tu|c%Bj1YRzbd
zdt)@1o0a}>2Xno2oph-kS&{krZVH0*nCY2#O8CJ^^(NptBS#Fclr)X0sW@Qd*GFMx
zz6fU+`MPv6wi6*`I0p9)H~YNwDb@uuJQbAbgI)@WW@!M;3i{7%mF!=*5Wj>wh$nqA
zWey
*{z+zNS{dIfW
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
literal 0
HcmV?d00001
diff --git a/src/client/index.html b/src/client/index.html
index caeee16d7..e6b521d61 100644
--- a/src/client/index.html
+++ b/src/client/index.html
@@ -56,7 +56,7 @@
.bg-image {
content: "";
- background-image: url("/images/EuropeBackground.webp");
+ background-image: url("/images/EuropeBackgroundBlurred.webp");
background-position: center;
background-attachment: fixed;
background-size: cover;
@@ -73,7 +73,6 @@
position: absolute;
width: 100%;
height: 100vh;
- backdrop-filter: blur(5px);
}
.dark .bg-image {
From 1aaf7bd2c50d27f04e335813210a96dd25fbee7c Mon Sep 17 00:00:00 2001
From: Fx Morin <28154542+FxMorin@users.noreply.github.com>
Date: Sun, 16 Nov 2025 16:32:30 -0500
Subject: [PATCH 05/22] Performance: Remove un-optimized blurring (#2466)
## Description:
I haven't been able to play openfront for a while now, so today I took
some time to fix the performance issue.
It turns out its `backdrop-filter: blur(5px);` being used on a
background element, causing the entire website to re-paint on nearly
every change.
This causes the game to run at 8 fps on my computer, with chrome
reporting 700ms of INP presentation delay.
The solution here was simply to pre-blur the background image.
Here's the instructions on how to pre-blur exactly like it
currently does
Install sharp
`npm install sharp`
Run blur
```ts
sharp(`./resources/images/EuropeBackground.webp`)
.blur(5)
.toFile(`./resources/images/EuropeBackgroundBlurred.webp`);
```
This could be automated if you plan to do more backgrounds.
The surprising part is that I'm running a A5000 with a Ryzen 9 5950X. So
I usually never lag from anything, which is what made this kinda
interesting. I assume the issue is caused by my 4K display or Kubuntu.
## Video:
This video showcases the 700+ms of delay on the main menu buttons. Video
is in real-time.
https://github.com/user-attachments/assets/ad5ff509-6bc7-48ff-8cba-85409be774f0
## Please complete the following:
- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
Discord Username
fx.morin
---
resources/images/EuropeBackgroundBlurred.webp | Bin 0 -> 42248 bytes
src/client/index.html | 3 +--
2 files changed, 1 insertion(+), 2 deletions(-)
create mode 100644 resources/images/EuropeBackgroundBlurred.webp
diff --git a/resources/images/EuropeBackgroundBlurred.webp b/resources/images/EuropeBackgroundBlurred.webp
new file mode 100644
index 0000000000000000000000000000000000000000..422fdeeda09501ab47056debfff4a5feb7c744a3
GIT binary patch
literal 42248
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