I was doing an audit some time back for my website and this is what I found.
Earlier the @font-face was defined in a CSS file and this is how the waterfall from WPT looked like. You can see the report here.
You can see that the request for the font was initiated only after the CSS was fetched and parsed. You could also see that when it was first discovered that font was required and when it actually started loading there is a gap that might probably be attributed to high Browser Main Thread activity during that time visible at the bottom of the waterfall.
So there were too issues, late request for font and some bottlenecks in downloading it when required. We can also see that Main Thread is quite free before that so what if we can load the font during that time, it would solve both the problems.
So this is what I did, I moved the
The solution for that would be to preload the font using link
<link rel=preload. After that this I saw the change I expected to see. But what was unexpected was that it improved LCP by a huge margin that made the score jump from 86 to 99. I am sure some of it can be attributed to variance but font preloading sure helped. Such a small change and huge benefit.
Though preloading should be used very carefully after measuring the performance as when some resource is loading early some other resource might be impacted. Andy Davis does a great writeup on a similar case of font preloading. It is a must-read.
Cost of Preloading is also a must read where Google Engineers explains the nuances of preloading. Quote from the doc.
Preloading fonts is squarely power user territory,