Det finns mÄnga sÀtt att förbÀttra webbprestanda. En av dem Àr förladdning av innehÄll som kommer att behövas senare. CSS-förbearbetning, förrendering av helsidor eller upplösning av domÀnnamn. Vi gör allt i förvÀg och visar sedan resultatet direkt! LÄter coolt.
Vad som Àr Ànnu coolare Àr att det Àr vÀldigt enkelt implementerat. Fem taggar ge webblÀsaren ett kommando för att utföra preliminÀra ÄtgÀrder:
<link rel= "preload"> ber webblÀsaren att ladda och cachelagra en resurs (som ett skript eller en stilmall) sÄ snart som möjligt. Detta Àr anvÀndbart nÀr en resurs behövs nÄgra sekunder efter att sidan har laddats - och du vill pÄskynda processen.
WebblÀsaren gör ingenting med resursen efter laddning. Skript körs inte, stilmallar tillÀmpas inte. Resursen cachelagras och görs omedelbart tillgÀnglig pÄ begÀran.
Som standard comic-sans.woff2 kommer att börja laddas först efter nedladdning och analys index.css. För att undvika att vÀnta sÄ lÀnge kan du ladda ner typsnittet tidigare med <link rel= "preload">:
Med detta tillvÀgagÄngssÀtt kommer icke-kritiska stilar bara att börja laddas nÀr JavaScript körs, vilket kan hÀnda nÄgra sekunder efter renderingen. IstÀllet för att vÀnta anvÀnder JS <link rel= "preload">för att börja ladda ner tidigare:
ĂveranvĂ€nd inte förladdning. Om du laddar allt i rad kommer sajten inte att pĂ„ magiskt sĂ€tt snabba upp, tvĂ€rtom kommer den att hindra webblĂ€saren frĂ„n att planera sitt arbete korrekt.
Ej att förvÀxla med förhÀmtning. AnvÀnd inte <link rel= "preload">, om du inte behöver resursen direkt efter att sidan har laddats. Om du behöver det senare, till exempel för nÀsta sida, anvÀnd dÄ <link rel= "prefetch">.
detaljer
Detta Àr en obligatorisk tagg ska köras av webblÀsaren (om den stöder det), till skillnad frÄn alla andra taggar relaterad till förladdning. WebblÀsaren mÄste ladda ner resursen som anges i <link rel="preload">. I andra fall kan den ignorera förladdning, till exempel om den körs pÄ en lÄngsam anslutning.
Prioriteringar. WebblÀsare tilldelar vanligtvis olika prioriteringar till olika resurser (stilar, skript, typsnitt, etc.) för att ladda de viktigaste resurserna först. I det hÀr fallet bestÀmmer webblÀsaren prioritet efter attribut as. För webblÀsaren Chrome kan du titta pÄ full prioritetstabell.
prefetch
<link rel= "prefetch"> ber webblÀsaren att ladda ner och cachelagra en resurs (som ett skript eller en stilmall) i bakgrunden. InlÀsning sker med lÄg prioritet sÄ att det inte stör viktigare resurser. Detta Àr anvÀndbart om resursen behövs pÄ nÀsta sida och du vill cache den i förvÀg.
Ăven hĂ€r gör webblĂ€saren ingenting med resursen efter att ha laddats. Skript körs inte, stilmallar tillĂ€mpas inte. Resursen cachelagras och görs omedelbart tillgĂ€nglig pĂ„ begĂ€ran.
Det Àr viktigt att specificera attributet as - detta hjÀlper webblÀsaren att korrekt prioritera och schemalÀgga nedladdningar.
NÀr du ska anvÀnda den
För att ladda resurser frÄn andra sidor, om du behöver en resurs frÄn en annan sida och du vill förladda den för att sedan snabba upp renderingen av den sidan. Till exempel:
Du har en webbutik och 40 % av anvÀndarna lÀmnar startsidan för produktsidan. AnvÀnda sig av <link rel= "prefetch">, laddar CSS- och JS-filer för att rendera produktsidor.
Du har en ensidig applikation och olika sidor laddar olika paket. NÀr en anvÀndare besöker en sida kan paket för alla sidor den lÀnkar till laddas i förvÀg.
Det Àr troligt att denna tagg kan anvÀndas sÀkert i vilken utstrÀckning som helst.. WebblÀsare schemalÀgger vanligtvis förhÀmtning med lÀgst prioritet, sÄ det stör ingen. TÀnk bara pÄ att det förbrukar anvÀndartrafik, 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. AnvÀnd i det hÀr fallet <link rel= "preload">.
detaljer
Valfri tagg. WebblÀsaren behöver inte följa denna instruktion, den kan ignorera den, till exempel vid en lÄngsam anslutning.
Prioritet i Chrome. I Chrome <link rel= "prefetch"> körs vanligtvis med minsta prioritet (se full prioritetstabell), det vill sÀga efter att ha laddat allt annat.
föranslut
<link rel= "preconnect"> ber webblÀsaren att ansluta till domÀnen i förvÀg nÀr du vill pÄskynda anslutningsinstallationen i framtiden.
WebblÀsaren mÄste upprÀtta en anslutning om den hÀmtar nÄgra resurser frÄn en ny tredjepartsdomÀn. Till exempel, om den laddar Google Fonts, React-fonter frÄn ett CDN eller begÀr ett JSON-svar frÄn en API-server.
Att etablera en ny anslutning tar vanligtvis nÄgra hundra millisekunder. Det görs en gÄng, men tar ÀndÄ tid. Om du har upprÀttat en anslutning i förvÀg kommer du att spara tid och ladda ner resurser frÄn denna domÀn snabbare.
href anger det domÀnnamn som du vill bestÀmma IP-adressen för. Kan anges med ett prefix (https://domain.com) eller utan det (//domain.com).
NÀr du ska anvÀnda den
AnvÀnd för domÀner som kommer att behövas snart för att ladda ner en viktig stil, ett skript eller en bild dÀrifrÄn, men du kÀnner inte till resursens URL Àn. Till exempel:
Din applikation Àr vÀrd pÄ my-app.com och gör AJAX-förfrÄgningar till api.my-app.com: Du kÀnner inte till de specifika frÄgorna i förvÀg eftersom de görs dynamiskt frÄn JS. HÀr Àr det ganska lÀmpligt att anvÀnda en tagg för att föransluta till domÀnen.
Din applikation Àr vÀrd pÄ my-app.com och anvÀnder Google Fonts. De laddas ner i tvÄ steg: först laddas CSS-filen ner frÄn domÀnen fonts.googleapis.com, dÄ begÀr den hÀr filen typsnitt med fonts.gstatic.com. Du kan inte veta vilka specifika teckensnittsfiler kommer frÄn fonts.gstatic.com du behöver tills du laddar CSS-filen, sÄ vi kan bara göra en preliminÀr anslutning i förvÀg.
AnvÀnd den hÀr taggen för att snabba upp nÄgot tredjepartsskript eller stil lite pÄ grund av förutbestÀmd anslutning.
ĂveranvĂ€nd inte. Att upprĂ€tta och underhĂ„lla en anslutning Ă€r en dyr operation för bĂ„de klienten och servern. AnvĂ€nd denna tagg för maximalt 4-6 domĂ€ner.
detaljer
Valfri tagg. WebblÀsaren behöver inte följa denna instruktion och kan ignorera den, till exempel om mÄnga anslutningar redan har upprÀttats eller i nÄgot annat fall.
Vad omfattar anslutningsprocessen?. För att ansluta till varje webbplats mÄste webblÀsaren göra följande:
DNS-upplösning. Hitta serverns IP-adress (216.58.215.78) för det angivna domÀnnamnet (google.com).
TCP-handslag. Byt paket (klient â server â klient) för att initiera en TCP-anslutning med servern.
TLS-handslag (endast HTTPS-webbplatser). TvĂ„ omgĂ„ngar av paketutbyte (klient â server â klient â server â klient) för att initiera en sĂ€ker TLS-session.
Notera: HTTP/3 kommer att förbÀttra och pÄskynda handskakningsmekanismen, men det Àr fortfarande lÄngt kvar.
dns-prefetch
<link rel= "dns-prefetch"> ber webblÀsaren att utföra DNS-upplösning för domÀnen i förvÀg om du snart ska ansluta till den och vill pÄskynda den initiala anslutningen.
WebblÀsaren mÄste faststÀlla domÀnens IP-adress om den kommer att hÀmta nÄgra resurser frÄn en ny tredjepartsdomÀn. Till exempel laddar Google Fonts, React-fonter frÄn ett CDN eller begÀr ett JSON-svar frÄn en API-server.
För varje ny domĂ€n tar DNS-postupplösningen vanligtvis cirka 20-120 ms. Detta pĂ„verkar bara laddningen av den första resursen frĂ„n en given domĂ€n, men introducerar fortfarande en fördröjning. Om vi ââutför DNS-upplösning i förvĂ€g kommer vi att spara tid och ladda resursen snabbare.
href anger det domÀnnamn som du vill stÀlla in IP-adressen för. Kan anges med ett prefix (https://domain.com) eller utan det (//domain.com).
NÀr du ska anvÀnda den
AnvÀnd för domÀner som kommer att behövas snart att ladda ner resurser dÀrifrÄn som webblÀsaren inte kÀnner till i förvÀg. Till exempel:
Din applikation Àr vÀrd pÄ my-app.com och gör AJAX-förfrÄgningar till api.my-app.com: Du kÀnner inte till de specifika frÄgorna i förvÀg eftersom de görs dynamiskt frÄn JS. HÀr Àr det ganska lÀmpligt att anvÀnda en tagg för att föransluta till domÀnen.
Din applikation Àr vÀrd pÄ my-app.com, och anvÀnder Google Fonts. De laddas ner i tvÄ steg: först laddas CSS-filen ner frÄn domÀnen fonts.googleapis.com, dÄ begÀr den hÀr filen typsnitt med fonts.gstatic.com. Du kan inte veta vilka specifika teckensnittsfiler kommer frÄn fonts.gstatic.com du kommer att behöva den tills du laddar CSS-filen, sÄ vi kan bara göra en preliminÀr anslutning i förvÀg.
AnvÀnd den hÀr taggen för att snabba upp nÄgot tredjepartsskript eller stil lite pÄ grund av förutbestÀmd anslutning.
Observera liknande egenskaper som <link rel= "dns-prefetch"/> О <link rel= "preconnect">. Det brukar inte vara meningsfullt att anvÀnda dem tillsammans för en domÀn: <link rel= "preconnect"> inkluderar redan <link rel= "dns-prefetch"/> och mycket mer. Detta kan motiveras i tvÄ fall:
Vill du stödja Àldre webblÀsare?. <link rel= "dns-prefetch" /> stöds av sedan IE10 och Safari 5. <link rel= "preconnect"> stöddes ett tag i Chrome och Firefox, men lades bara till i Safari 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 reservalternativ för <link rel= "preconnect">.
Du vill pÄskynda anslutningar till fler Àn 4-6 domÀner. MÀrka <link rel= "preconnect"> Det rekommenderas inte att anvÀnda med fler Àn 4-6 domÀner, eftersom att upprÀtta och underhÄlla en anslutning Àr en dyr operation. <link rel= "dns-prefetch" /> förbrukar mindre resurser, sÄ anvÀnd den vid behov.
detaljer
Valfri tagg. WebblÀsaren behöver inte följa denna instruktion, sÄ den kanske inte utför 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 har en unik IP-adress, som ser ut 216.58.215.78. Namnet pÄ webbplatsen skrivs vanligtvis in i webblÀsarens adressfÀlt (t.ex. google.com), och DNS-servrar (Domain Name System) matchar det med serverns IP-adress (216.58.215.78).
För att faststĂ€lla en IP-adress mĂ„ste webblĂ€saren frĂ„ga DNS-servern. Det tar 20â120 ms nĂ€r du ansluter till en ny tredjepartsdomĂ€n.
DNS cachelagras, Àven om det inte Àr sÀrskilt tillförlitligt. Vissa operativsystem och webblÀsare cachelagrar DNS-förfrÄgningar: detta sparar tid pÄ upprepade frÄgor, men det gÄr inte att lita pÄ cachelagring. PÄ Linux fungerar det vanligtvis inte alls. Chrome har en DNS-cache, men den varar bara i en minut. Windows cachar DNS-svar i fem dagar.
förlÀngning
<link rel= "prerender"> ber webblÀsaren att ladda ner URL:en och visa den pÄ en osynlig flik. NÀr anvÀndaren klickar pÄ lÀnken ska 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 pÄskynda visningen av den.
Trots (eller pÄ grund av) den exceptionella effektiviteten av denna tagg, 2019 <link rel= "prerender"> dÄligt stöd i större webblÀsare. Se mer information. nedan.
href pekar pÄ webbadressen som du vill börja rendera i bakgrunden.
NÀr du ska anvÀnda den
NÀr du Àr riktigt sÀker pÄ att anvÀndaren kommer att gÄ till en viss sida. Om du har en "tunnel" genom vilken 70 % av besökarna pÄ sida A gÄr till sida B, dÄ <link rel= "prerender"> pÄ sida A hjÀlper till att visa sida B mycket snabbt.
ĂveranvĂ€nd inte. Förrendering Ă€r extremt dyrt vad gĂ€ller bandbredd och minne. AnvĂ€nd inte <link rel= "prerender"> för mer Ă€n en sida.
detaljer
Valfri tagg. WebblÀsaren behöver inte följa denna instruktion och kan ignorera den, till exempel vid en lÄngsam anslutning eller nÀr det inte finns tillrÀckligt med ledigt minne.
För att spara minne Chrome gör inte full renderingOch endast förladda NoState. Det betyder att Chrome lÀser in sidan och alla dess resurser, men inte renderar eller kör JavaScript.
Firefox och Safari stöder inte den hÀr taggen alls. Detta bryter inte mot specifikationen, eftersom webblÀsare inte behöver följa denna instruktion; men fortfarande ledsen. Implementeringsbugg Firefox har varit öppet i sju Är. Det finns rapporter om att Safari stöder inte den hÀr taggen heller.
Sammanfattning
AnvÀnda sig av:
<link rel= "preload"> - nÀr du behöver en resurs pÄ nÄgra sekunder
<link rel= "preconnect"> - nÀr du vet att du kommer att behöva en resurs snart, men du vet Ànnu inte dess fullstÀndiga URL
<link rel= "dns-prefetch"> - pÄ samma sÀtt, nÀr du vet att du kommer att behöva en resurs snart, men du Ànnu inte kÀnner till dess fullstÀndiga URL (för Àldre webblÀsare)
<link rel= "prerender"> â nĂ€r du Ă€r sĂ€ker pĂ„ att anvĂ€ndare kommer att gĂ„ till en viss sida och du vill snabba upp dess visning