问题
Light House audit is suggesting that I preload key requests, specifically the two google fonts that I'm using in my React app. A Light House member suggested using:
<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Open+Sans|Roboto:700" crossorigin>
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
I know it's making the request because I see it in the waterfall and I get this console warning:
"The resource https://fonts.googleapis.com/css?family=Open+Sans|Roboto:700 was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate as value and it is preloaded intentionally."
Unfortunately the two font do not display in my app anymore. Do I need to define these in my CSS with @font-face or something like that?
回答1:
The correct way to preload a font would be by adding both a preload
link and a stylesheet
. A simplified example, based on MDN is as follows:
<head>
<meta charset="utf-8">
<title>Preloading fonts</title>
<link rel="preload" href="https://fonts.googleapis.com/css?family=Roboto&display=swap" as="style">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto&display=swap">
</head>
<body>
</body>
In the above example, the preload
link will send a request to fetch the font regardless of it being installed or not on the client and then use the stylesheet
link to properly load and use it.
preload
is more of a way to tell the browser that a resource will probably be needed, so that it will be requested regardless and then, if you need it or decide to use it, you can.
- Preloading content with rel="preload" - MDN
- Preload your Webfont resources - Google Developers
- rel="preload" support - Can I use
回答2:
It is recommended that you preconnect, then preload, and the finally load as follows:
<link rel='preconnect' href='https://fonts.gstatic.com' crossorigin>
<link rel='preload' as='style' href='https://fonts.googleapis.com/css?family=Open+Sans|Roboto:wght@300&display=swap'>
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Open+Sans|Roboto:wght@700&display=swap'>
You cannot just preconnect and/or preload, you still need to load as usual. Also, you just specify any font weight that is not the default for that given font. I went on today and they are showing to put :wght@700 which I tried and it works. Chances are just :700 will still work. Also, they are having us put &family= between successive fonts but I cannot get that to work so I am sticking with the pipe | sign.
来源:https://stackoverflow.com/questions/50824181/preloading-google-fonts