Preload, prefetch och andra taggar

Det finns MÄnga sÀtt att förbÀttra webbprestanda. Ett av dem Àr att förladda innehÄll som kommer att behövas senare. Pre-fetching av CSS, förrendering av hela sidan eller domÀnnamnsupplösning. Vi gör allt i förvÀg och visar sedan resultatet omedelbart! LÄter fantastiskt.

Ännu bĂ€ttre Ă€r att detta Ă€r vĂ€ldigt enkelt att implementera. Fem <link rel>-taggar ger webblĂ€saren order om förhandsĂ„tgĂ€rder:

<link rel="prefetch" href="/style.css" as="style" />
<link rel="preload" href="/style.css" as="style" />

<link rel="preconnect" href="https://example.com" />
<link rel="dns-prefetch" href="https://example.com" />

<link rel="prerender" href="https://example.com/about.html" />


Kortfattat ska vi förklara vad de gör och nÀr de ska anvÀndas.

GÄ till: preload · prefetch · preconnect · dns-prefetch · prerender

preload

<link rel="preload"> berÀttar webblÀsaren att sÄ tidigt som möjligt ladda och cacha resurser (sÄsom skript eller stilmallar). Detta Àr anvÀndbart nÀr resursen kommer att behövas nÄgra sekunder efter att sidan har laddats - och du vill snabba upp processen.

WebblÀsaren gör ingenting med resursen efter att den har laddats. Skripten körs inte, stilmallarna appliceras inte. Resursen cacheras bara och tillhandahÄlls omedelbart pÄ begÀran.

Syntax

<link rel="preload" href="/style.css" as="style" />

href pekar pÄ resursen som du vill ladda ner.

som kan vara vad som helst som gÄr att ladda ner i webblÀsaren:

  • style för stilmallar,
  • script för skript,
  • font för typsnitt,
  • fetch för resurser som laddas med fetch() eller XMLHttpRequest,
  • fullstĂ€ndig lista se. pĂ„ MDN.

Det Ă€r viktigt att ange attributet som – det hjĂ€lper webblĂ€saren att korrekt prioritera och planera laddningen.

NÀr anvÀnda

AnvÀnd preload nÀr resursen kommer att behövas inom kort. Till exempel:

  • Ovanliga typsnitt frĂ„n en extern fil:
    <!-- index.html -->
    <link rel="stylesheet" href="index.css" />
    /* index.css */
    @font-face {
      src: url('comic-sans.woff2') format('woff2');
    }

    Som standard comic-sans.woff2 börjar ladda först efter att den har laddats och analyserats. index.cssFör att inte behöva vÀnta sÄ lÀnge kan du ladda typsnittet tidigare med <link rel="preload">:

    <link rel="preload" href="comic-sans.woff2" as="font" />
  • Om du delar dina stilar enligt metoden Critical CSS i tvĂ„ delar, kritisk (för omedelbar rendering) och icke-kritisk:
    <style>
    /* Inlined critical styles */
    </style>
    
    <script>
    /* Custom JS that starts downloading non-critical styles */
    loadCSS('/app/non-critical.css');
    </script>

    Med den hÀr metoden kommer icke-kritiska stilar att börja laddas först nÀr JavaScript har körts, vilket kan ske efter nÄgra sekunder efter rendering. AnvÀnd istÀllet <link rel="preload">, för att pÄbörja inladdningen tidigare:

    /* Inbakade kritiska stilar */

Överdriv inte med förladdning. Om du laddar allt pĂ„ en gĂ„ng kommer sidan inte att bli snabbare magiskt, tvĂ€rtom kan det förhindra att webblĂ€saren planerar arbetet pĂ„ ett effektivt sĂ€tt.

FörvÀxla inte med prefetching. AnvÀnd inte <link rel="preload">, om du inte behöver resursen omedelbart efter att sidan har laddats. Om den behövs senare, till exempel pÄ nÀsta sida, anvÀnd <link rel= "prefetch">.

Detaljer

Detta Àr en obligatorisk tagg för webblÀsaren (om den stöder den), till skillnad frÄn alla andra -taggar relaterade till förladdning. WebblÀsaren mÄste ladda resursen som anges i <link rel="preload">. I andra fall kan den ignorera förladdningen, till exempel om den arbetar pÄ en lÄngsam anslutning.

Prioriteringar. Olika resurser (stilar, skript, teckensnitt osv.) fÄr vanligtvis olika prioriteter av webblÀsare för att först ladda de viktigaste resurserna. I det hÀr fallet bestÀmmer webblÀsaren prioriteten baserat pÄ attributet som. För Chrome-webblÀsaren kan du se den fullstÀndiga prioritetslistan.

Preload, prefetch och andra taggar

prefetch

<link rel= "prefetch"> ber om att webblÀsaren ska ladda och cacha resursen (till exempel ett skript eller en stil) i bakgrunden. Laddningen sker med lÄg prioritet, sÄ det stör inte mer viktiga resurser. Detta Àr anvÀndbart om resursen behövs pÄ nÀsta sida och du vill cacha den i förvÀg.

HÀr gör webblÀsaren inget med resursen efter att den har laddats. Skript körs inte, stilar tillÀmpas inte. Resursen cachas bara och görs omedelbart tillgÀnglig pÄ begÀran.

Syntax

<link rel="prefetch" href="/style.css" as="style" />

href pekar pÄ resursen som du vill ladda ner.

som kan vara vad som helst som gÄr att ladda ner i webblÀsaren:

  • style för stilmallar,
  • script för skript,
  • font för typsnitt,
  • fetch för resurser som laddas med fetch() eller XMLHttpRequest,
  • fullstĂ€ndig lista se. pĂ„ MDN.

Det Ă€r viktigt att ange attributet som – det hjĂ€lper webblĂ€saren att prioritera och planera laddningen pĂ„ rĂ€tt sĂ€tt.

NÀr anvÀnda

För att ladda resurser frÄn andra sidor, om resursen frÄn en annan sida behövs och du vill förladda den för att sedan pÄskynda rendering av den sidan. Till exempel:

  • Du har en webbshop, och 40% av anvĂ€ndarna lĂ€mnar startsidan för produktens sida. AnvĂ€nd <link rel= "prefetch">, genom att ladda CSS- och JS-filer för att rendera sidor med produkten.
  • Du har en enkel-sidapp, och olika sidor laddar olika paket. NĂ€r en anvĂ€ndare besöker en sida kan du förhandsladda paketen för alla sidor som den lĂ€nkar till.

Denna tagg kan troligen anvÀndas sÀkert i valfri mÀngd. WebblÀsare planerar vanligtvis prefetch med lÀgsta prioritet, sÄ det stör ingen. TÀnk bara pÄ att det förbrukar anvÀndarens trafik, vilket kan kosta pengar.

Inte för brÄdskande förfrÄgningar. AnvÀnd inte <link rel= "prefetch">, nÀr resursen behövs inom nÄgra sekunder. I det hÀr fallet, anvÀnd <link rel="preload">.

Detaljer

Valfri tagg. WebblÀsaren Àr inte skyldig att följa denna instruktion, den kan ignorera den, till exempel pÄ en lÄngsam anslutning.

Prioritet i Chrome. I Chrome <link rel= "prefetch"> utförs vanligtvis med minimal prioritet (se den fullstÀndiga prioritetslistan), det vill sÀga efter att allt annat har laddats.

preconnect

<link rel= "preconnect"> ber webblÀsaren att ansluta till domÀnen i förvÀg nÀr du vill snabba upp anslutningen i framtiden.

WebblÀsaren bör etablera en anslutning om den hÀmtar resurser frÄn en ny extern domÀn. Till exempel, om den laddar typsnitt frÄn Google Fonts, React frÄn CDN, eller gör en begÀran om JSON-svar frÄn API-servern.

Det tar vanligtvis flera hundra millisekunder att upprÀtta en ny anslutning. Den görs en gÄng, men den tar ÀndÄ tid. Om du har upprÀttat en anslutning i förvÀg, sparar du tid och laddar resurser snabbare frÄn denna domÀn.

Syntax

<link rel= "preconnect" href="https://api.my-app.com" />

href anger domÀnnamnet för vilket IP-adressen ska upprÀttas. Det kan anges med ett prefix (https://domain.com) eller utan (//domain.com).

NÀr anvÀnda

AnvÀnd för domÀner som snart behövs för att ladda viktiga stilar, skript eller bilder dÀrifrÄn, men du vet fortfarande inte URL:en för resursen. Till exempel:

  • Din applikation Ă€r hostad pĂ„ my-app.com och gör AJAX-förfrĂ„gningar till api.my-app.com: du vet inte pĂ„ förhand vilka specifika förfrĂ„gningar som görs, eftersom de görs dynamiskt frĂ„n JS. HĂ€r Ă€r det helt i sin ordning att anvĂ€nda taggen för förhandsanslutning till domĂ€nen.
  • Din applikation Ă€r hostad pĂ„ my-app.com och anvĂ€nder typsnitt frĂ„n Google Fonts. De laddas i tvĂ„ steg: först laddas CSS-filen frĂ„n domĂ€nen fonts.googleapis.com, dĂ€refter begĂ€r den filen typsnitt frĂ„n fonts.gstatic.com.Du kan inte veta vilka specifika typsnittsfiler som fonts.gstatic.com. Du kommer att behöva, tills du har laddat upp CSS-filen, sĂ„ vi kan i förvĂ€g bara upprĂ€tta en preliminĂ€r anslutning.

AnvÀnd denna tagg för att lite snabba upp ett tredjepartsskript eller -stil genom att förbereda anslutningen.

Missbruk inte. Att upprÀtta och underhÄlla en anslutning Àr en kostsam operation bÄde för klienten och servern. AnvÀnd denna tagg högst för 4-6 domÀner.

Detaljer

Valfri tagg. WebblÀsaren Àr inte skyldig att följa denna instruktion och kan ignorera den, till exempel om det redan finns mÄnga anslutningar eller i nÄgot annat fall.

Vad ingÄr i anslutningsprocessen. För att ansluta till varje webbplats mÄste webblÀsaren utföra följande ÄtgÀrder:

  • DNS-upplösning. Hitta IP-adressen till servern (216.58.215.78) för det angivna domĂ€nnamnet (google.com).
  • TCP-handshake. Utbyte av paket (klient → server → klient) för att initiera TCP-anslutningen till servern.
  • TLS-handshake (endast för HTTPS-webbplatser). TvĂ„ omgĂ„ngar av paketutbyte (klient → server → klient → server → klient) för att initiera en sĂ€ker TLS-session.

Observera: HTTP/3 kommer att förbÀttra och snabba upp handskakningsmekanismen, men det Àr fortfarande lÄngt borta.

dns-prefetch

<link rel= "dns-prefetch"> ber webblÀsaren att i förvÀg utföra DNS-upplösning för domÀnen om du snart kommer att ansluta till den och vill snabba upp den initiala anslutningen.

WebblÀsaren mÄste avgöra IP-adressen för domÀnen om den ska hÀmta nÄgra resurser frÄn en ny tredjepartsdomÀn. Till exempel ladda Google Fonts, React frÄn CDN eller begÀra JSON-svar frÄn API-servern.

För varje ny domĂ€n tar det vanligtvis cirka 20–120 ms att lösa DNS-poster. Detta pĂ„verkar endast inlĂ€sningen av den första resursen frĂ„n denna domĂ€n, men representerar Ă€ndĂ„ en fördröjning. Om DNS-upplösning görs i förvĂ€g sĂ„ sparar vi tid och laddar resursen snabbare.

Syntax

<link rel= "dns-prefetch" href="https://api.my-app.com" />

href angiver domÀnnamnet för vilket IP-adressen ska upprÀttas. Kan anges med prefix (https://domain.com) eller utan (//domain.com).

NÀr anvÀnda

AnvÀnd för domÀner som snart behövs för att ladda resurser dÀrifrÄn som webblÀsaren inte kÀnner till i förvÀg. Till exempel:

  • Din applikation Ă€r hostad pĂ„ my-app.com och gör AJAX-förfrĂ„gningar till api.my-app.com: du vet inte pĂ„ förhand vilka specifika förfrĂ„gningar som görs, eftersom de görs dynamiskt frĂ„n JS. HĂ€r Ă€r det helt i sin ordning att anvĂ€nda taggen för förhandsanslutning till domĂ€nen.
  • Din applikation Ă€r hostad pĂ„ my-app.com, och anvĂ€nder Google Fonts. De laddas i tvĂ„ steg: först laddas CSS-filen frĂ„n domĂ€nen fonts.googleapis.com, dĂ€refter begĂ€r den filen typsnitt frĂ„n fonts.gstatic.com.Du kan inte veta vilka specifika typsnittsfiler som fonts.gstatic.com. du kommer att behöva, tills du har laddat upp CSS-filen, sĂ„ vi kan i förvĂ€g bara upprĂ€tta en preliminĂ€r anslutning.

AnvÀnd denna tagg för att lite snabba upp ett tredjepartsskript eller -stil genom att förbereda anslutningen.

Observera liknande egenskaper pÄ <link rel= "dns-prefetch"/> och <link rel= "preconnect">. Att anvÀnda dem tillsammans för en domÀn Àr vanligtvis meningslöst: <link rel= "preconnect"> inkluderar redan <link rel= "dns-prefetch"/> och mycket mer. Detta kan rÀttfÀrdigas i tvÄ fall:

  • Du vill stödja gamla webblĂ€sare. <link rel= "dns-prefetch" /> endast manuellt via lĂ€get «about:debugging» och krĂ€ver tillĂ€mpning av en patch. frĂ„n och med IE10 och Safari 5. <link rel= "preconnect"> har ett tag stödts i Chrome och Firefox, men lades till i Safari först i 11.1 och stöds fortfarande inte i IE/Edge. Om du behöver stödja dessa webblĂ€sare, anvĂ€nd <link rel= "dns-prefetch" /> som en reservlösning för <link rel= "preconnect">.
  • Du vill snabba upp anslutningar till mer Ă€n 4–6 domĂ€ner. Taggen <link rel= "preconnect"> rekommenderas inte att anvĂ€nda med mer Ă€n 4–6 domĂ€ner, eftersom installation och underhĂ„ll av anslutningen Ă€r en kostsam operation. <link rel= "dns-prefetch" /> förbrukar mindre resurser, sĂ„ anvĂ€nd det om det behövs.

Detaljer

Valfri tagg. WebblÀsaren Àr inte skyldig att följa denna instruktion, och kan dÀrför vÀlja att inte göra DNS-upplösning, till exempel om det finns mÄnga sÄdana taggar pÄ sidan eller i nÄgot annat fall.

Vad Àr DNS. Varje server pÄ internet motsvaras av en unik IP-adress, som ser ut som 216.58.215.78. I webblÀsarens adressrad anges vanligtvis webbplatsens namn (till exempel, google.com), och DNS-servrar (Domain Name System) kopplar det till serverns IP-adress (216.58.215.78).

För att bestĂ€mma IP-adressen mĂ„ste webblĂ€saren utföra en begĂ€ran till DNS-servern. Detta tar 20–120 ms att ansluta till en ny tredje part-domĂ€n.

DNS cachelagras, om Àn inte sÀrskilt pÄlitligt. Vissa operativsystem och webblÀsare cachelagrar DNS-förfrÄgningar: detta sparar tid vid upprepade förfrÄgningar, men man kan inte lita pÄ cachelagring. I Linux fungerar det vanligtvis inte alls. Chrome har en DNS-cache, men den lever bara i en minut. Windows cachelagrar DNS-svar i fem dagar.

prerender

<link rel= "prerender"> ber webblÀsaren att ladda URL:en och visa den pÄ en osynlig flik. NÀr anvÀndaren klickar pÄ lÀnken bör sidan visas omedelbart. Detta Àr anvÀndbart om du Àr sÀker pÄ att anvÀndaren kommer att besöka en viss sida och vill snabba upp dess visning.

Trots den exceptionella effektiviteten hos denna tagg (eller pĂ„ grund av den) stödjs den dĂ„ligt av de flesta webblĂ€sare 2019. Mer information finns i. <link rel= "prerender"> ĐżĐ»ĐŸŃ…ĐŸ ĐżĐŸĐŽĐŽĐ”Ń€Đ¶ĐžĐČĐ°Đ”Ń‚ŃŃ ĐŸŃĐœĐŸĐČĐœŃ‹ĐŒĐž Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Đ°Ń…. ĐŸĐŸĐŽŃ€ĐŸĐ±ĐœĐ”Đ” ŃĐŒ. nedan.

Syntax

anger URL:en för vilken du vill aktivera rendering i bakgrunden.

href NÀr du verkligen Àr sÀker pÄ att anvÀndaren kommer att gÄ till en viss sida

NÀr anvÀnda

ĐšĐŸĐłĐŽĐ° ĐČы ĐŽĐ”ĐčстĐČĐžŃ‚Đ”Đ»ŃŒĐœĐŸ уĐČĐ”Ń€Đ”ĐœŃ‹, Ń‡Ń‚ĐŸ ĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°Ń‚Đ”Đ»ŃŒ пДрДĐčЮёт ĐœĐ° ĐŸĐżŃ€Đ”ĐŽĐ”Đ»Ń‘ĐœĐœŃƒŃŽ ŃŃ‚Ń€Đ°ĐœĐžŃ†Ńƒ. Om du har en "tunnel" dĂ€r 70% av besökarna pĂ„ sidan A gĂ„r vidare till sidan B, sĂ„ <link rel= "prerender"> kan sidan A snabbt hjĂ€lpa till att visa sidan B.

Missbruk inte. Förhandsrendering Àr extremt kostsamt i termer av trafik och minne. AnvÀnd inte <link rel= "prerender"> för mer Àn en sida.

Detaljer

Valfri tagg. WebblÀsaren Àr inte skyldig att följa denna instruktion och kan ignorera den, till exempel vid lÄngsamma anslutningar eller om det finns otillrÀckligt med ledigt minne.

För att spara minne utför Chrome inte fullstÀndig rendering, och som bara förladdning NoState. Det innebÀr att Chrome laddar sidan och alla dess resurser, men gör ingen rendering och kör ingen JavaScript.

Firefox och Safari stöder överhuvudtaget inte denna tagg. Detta bryter inte mot specifikationen, eftersom webblÀsare inte Àr skyldiga att följa denna instruktion; men det Àr fortfarande trÄkigt. Implementeringsbuggen i Firefox har varit öppen i sju Är. Det finns rapporter om att Safari inte heller stödjer denna tagg.

Sammanfattning

AnvÀnd:

  • <link rel="preload"> — nĂ€r du behöver resursen inom nĂ„gra sekunder
  • <link rel= "prefetch"> — nĂ€r du behöver resursen pĂ„ nĂ€sta sida
  • <link rel= "preconnect"> — nĂ€r du vet att du snart kommer att behöva resursen, men du vet Ă€nnu inte dess fullstĂ€ndiga URL
  • <link rel= "dns-prefetch"> — pĂ„ samma sĂ€tt, nĂ€r du vet att du snart kommer att behöva resursen, men du vet Ă€nnu inte dess fullstĂ€ndiga URL (för Ă€ldre webblĂ€sare)
  • <link rel= "prerender"> — nĂ€r du Ă€r sĂ€ker pĂ„ att anvĂ€ndarna kommer att gĂ„ till en viss sida och vill snabba pĂ„ dess visning

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster