ForhÄndslast, forhÄndshent og andre tagger

Det er mange mÄter Ä forbedre nettytelsen pÄ. En av dem er forhÄndsinnlasting av innhold som vil vÊre nÞdvendig senere. CSS-forbehandling, forhÄndsgjengivelse av helside eller opplÞsning av domenenavn. Vi gjÞr alt pÄ forhÄnd, og viser deretter resultatet umiddelbart! HÞres kult ut.

Det som er enda kulere er at det er veldig enkelt implementert. Fem tagger gi nettleseren en kommando for Ă„ utfĂžre forelĂžpige handlinger:

<link rel="prefetch" href="/no/style.css" as="style" />
<link rel="preload" href="/no/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" />


La oss kort forklare hva de gjÞr og nÄr de skal brukes.

Hoppe til: forspenning · prefetch · forhÄndskoble · dns-prefetch · forhÄndsgjengivelse

forspenning

<link rel= "preload"> ber nettleseren laste inn og hurtigbufre en ressurs (som et skript eller et stilark) sĂ„ snart som mulig. Dette er nyttig nĂ„r en ressurs er nĂždvendig noen sekunder etter at siden er lastet inn – og du vil fremskynde prosessen.

Nettleseren gjÞr ingenting med ressursen etter innlasting. Skript blir ikke utfÞrt, stilark brukes ikke. Ressursen bufres ganske enkelt og gjÞres umiddelbart tilgjengelig pÄ forespÞrsel.

syntaks

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

href peker pÄ ressursen du vil laste ned.

as kan vĂŠre alt som kan lastes ned i nettleseren:

  • style for stilark,
  • script for skript,
  • font for fonter,
  • fetch for ressurser lastet ved hjelp av fetch() eller XMLHttpRequest,
  • se hele listen pĂ„ MDN.

Det er viktig Ă„ spesifisere attributtet as – dette hjelper nettleseren med Ă„ prioritere og planlegge nedlastinger riktig.

NÄr skal brukes

Bruk forhÄndsinnlasting nÄr ressursen er nÞdvendig i nÊr fremtid. For eksempel:

  • Ikke-standard fonter fra en ekstern 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 vil begynne Ä laste fÞrst etter nedlasting og parsing index.css. For Ä unngÄ Ä vente sÄ lenge, kan du laste ned skriften tidligere ved Ä bruke <link rel= "preload">:

    <link rel="preload" href="comic-sans.woff2" as="font" />
  • Hvis du skiller stilene dine i henhold til tilnĂŠrmingen Kritisk CSS i to deler, kritisk (for umiddelbar gjengivelse) og ikke-kritisk:
    <style>
    /* Inlined critical styles */
    </style>
    
    <script>
    /* Custom JS that starts downloading non-critical styles */
    loadCSS('/app/non-critical.css');
    </script>

    Med denne tilnÊrmingen vil ikke-kritiske stiler fÞrst begynne Ä laste nÄr JavaScript kjÞrer, noe som kan skje noen sekunder etter gjengivelsen. I stedet for Ä vente JS bruk <link rel= "preload">for Ä begynne Ä laste ned tidligere:

    <style>
    /* Inlined critical styles */
    </style>
    
    <link rel="preload" href="/no/app/non-critical.css" as="style" />
    
    <script>
    /* Custom JS that starts downloading non-critical styles */
    loadCSS('/app/non-critical.css');
    </script>

Ikke overbruk forhÄndslasting. Hvis du laster inn alt pÄ rad, vil ikke nettstedet pÄ magisk vis Þke hastigheten, tvert imot vil det forhindre nettleseren i Ä planlegge arbeidet riktig.

For ikke Ä forveksle med forhÄndshenting. Ikke bruk <link rel= "preload">, hvis du ikke trenger ressursen umiddelbart etter at siden er lastet inn. Hvis du trenger det senere, for eksempel til neste side, sÄ bruk <link rel= "prefetch">.

detaljer

Dette er et obligatorisk merke skal kjÞres av nettleseren (hvis den stÞtter det), i motsetning til alle andre tagger relatert til forhÄndslasting. Nettleseren mÄ laste ned ressursen spesifisert i <link rel="preload">. I andre tilfeller kan den ignorere forhÄndsinnlasting, for eksempel hvis den kjÞrer pÄ en treg tilkobling.

Prioriteringer. Nettlesere tildeler vanligvis forskjellige prioriteter til forskjellige ressurser (stiler, skript, fonter osv.) for Ä laste de viktigste ressursene fÞrst. I dette tilfellet bestemmer nettleseren prioritet etter attributt as. For Chrome-nettleseren kan du se pÄ full prioritetstabell.

ForhÄndslast, forhÄndshent og andre tagger

prefetch

<link rel= "prefetch"> ber nettleseren laste ned og hurtigbufre en ressurs (som et skript eller et stilark) i bakgrunnen. Lasting skjer med lav prioritet, slik at det ikke forstyrrer viktigere ressurser. Dette er nyttig hvis ressursen er nÞdvendig pÄ neste side og du Þnsker Ä bufre den pÄ forhÄnd.

OgsÄ her gjÞr nettleseren ingenting med ressursen etter innlasting. Skript blir ikke utfÞrt, stilark brukes ikke. Ressursen bufres og gjÞres umiddelbart tilgjengelig pÄ forespÞrsel.

syntaks

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

href peker pÄ ressursen du vil laste ned.

as kan vĂŠre alt som kan lastes ned i nettleseren:

  • style for stilark,
  • script for skript,
  • font for fonter,
  • fetch for ressurser lastet ved hjelp av fetch() eller XMLHttpRequest,
  • se hele listen pĂ„ MDN.

Det er viktig Ă„ spesifisere attributtet as - Dette hjelper nettleseren med Ă„ prioritere og planlegge nedlastinger riktig.

NÄr skal brukes

For Ä laste ressurser fra andre sider, hvis du trenger en ressurs fra en annen side, og du vil forhÄndslaste den for Ä Þke hastigheten pÄ gjengivelsen av den siden. For eksempel:

  • Du har en nettbutikk, og 40 % av brukerne forlater hjemmesiden til produktsiden. Bruk <link rel= "prefetch">, laster CSS- og JS-filer for Ă„ gjengi produktsider.
  • Du har en enkeltsideapplikasjon, og forskjellige sider laster forskjellige pakker. NĂ„r en bruker besĂžker en side, kan pakker for alle sidene den lenker til forhĂ„ndslastes.

Det er sannsynlig at denne taggen kan brukes trygt i noen grad.. Nettlesere planlegger vanligvis forhÄndshenting med lavest prioritet, sÄ det plager ingen. Bare husk at det forbruker brukertrafikk, noe som kan koste penger.

Ikke for presserende forespÞrsler. Ikke bruk <link rel= "prefetch">, nÄr ressursen er nÞdvendig om noen fÄ sekunder. I dette tilfellet, bruk <link rel= "preload">.

detaljer

Valgfri tag. Nettleseren er ikke pÄlagt Ä fÞlge denne instruksjonen; den kan ignorere den, for eksempel ved en treg tilkobling.

Prioritet i Chrome. I Chrome <link rel= "prefetch"> vanligvis utfĂžrt med minimum prioritet (se full prioritetstabell), det vil si etter Ă„ ha lastet alt annet.

forhÄndskoble

<link rel= "preconnect"> ber nettleseren om Ä koble til domenet pÄ forhÄnd nÄr du Þnsker Ä fremskynde tilkoblingsoppsettet i fremtiden.

Nettleseren mÄ opprette en tilkobling hvis den henter ressurser fra et nytt tredjepartsdomene. For eksempel, hvis den laster inn Google Fonts, React-fonter fra en CDN eller ber om et JSON-svar fra en API-server.

Å etablere en ny tilkobling tar vanligvis noen hundre millisekunder. Det gjĂžres en gang, men tar likevel tid. Hvis du har opprettet en tilkobling pĂ„ forhĂ„nd, vil du spare tid og laste ned ressurser fra dette domenet raskere.

syntaks

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

href angir domenenavnet du vil bestemme IP-adressen for. Kan spesifiseres med et prefiks (https://domain.com) eller uten det (//domain.com).

NÄr skal brukes

Bruk for domener som vil vÊre nÞdvendig snart for Ä laste ned en viktig stil, et skript eller et bilde derfra, men du vet ikke ressurs-URLen ennÄ. For eksempel:

  • Applikasjonen din er vert pĂ„ my-app.com og gjĂžr AJAX-forespĂžrsler til api.my-app.com: Du kjenner ikke de spesifikke spĂžrringene pĂ„ forhĂ„nd fordi de er laget dynamisk fra JS. Her er det ganske hensiktsmessig Ă„ bruke en tag for Ă„ forhĂ„ndskoble til domenet.
  • Applikasjonen din er vert pĂ„ my-app.com og bruker Google Fonts. De lastes ned i to trinn: FĂžrst lastes CSS-filen ned fra domenet fonts.googleapis.com, sĂ„ ber denne filen om skrifter med fonts.gstatic.com. Du kan ikke vite hvilke spesifikke skriftfiler er fra fonts.gstatic.com du trenger til du laster CSS-filen, sĂ„ vi kan bare lage en forelĂžpig tilkobling pĂ„ forhĂ„nd.

Bruk denne taggen for Ä Þke hastigheten pÄ et tredjepartsskript eller stil litt pÄ grunn av forhÄndsetablert forbindelse.

Ikke bruk for mye. Å etablere og vedlikeholde en tilkobling er en kostbar operasjon for bĂ„de klienten og serveren. Bruk denne taggen for maksimalt 4-6 domener.

detaljer

Valgfri tag. Nettleseren er ikke pÄlagt Ä fÞlge denne instruksjonen og kan ignorere den, for eksempel hvis mange tilkoblinger allerede er etablert eller i andre tilfeller.

Hva inkluderer tilkoblingsprosessen?. For Ä koble til hvert nettsted mÄ nettleseren gjÞre fÞlgende:

  • DNS-opplĂžsning. Finn serverens IP-adresse (216.58.215.78) for det angitte domenenavnet (google.com).
  • TCP-hĂ„ndtrykk. Utveksle pakker (klient → server → klient) for Ă„ starte en TCP-forbindelse med serveren.
  • TLS-hĂ„ndtrykk (kun HTTPS-nettsteder). To runder med pakkeutveksling (klient → server → klient → server → klient) for Ă„ starte en sikker TLS-sesjon.

Merk: HTTP/3 vil forbedre og Þke hastigheten pÄ hÄndtrykkmekanismen, men det er fortsatt et stykke unna.

dns-prefetch

<link rel= "dns-prefetch"> ber nettleseren om Ä utfÞre DNS-opplÞsning for domenet pÄ forhÄnd hvis du snart skal koble til det og vil Þke hastigheten pÄ den fÞrste tilkoblingen.

Nettleseren mÄ bestemme domenets IP-adresse hvis den vil hente ressurser fra et nytt tredjepartsdomene. For eksempel Ä laste inn Google Fonts, React-fonter fra en CDN eller be om et JSON-svar fra en API-server.

For hvert nytt domene tar DNS-postopplÞsningen vanligvis omtrent 20-120 ms. Dette pÄvirker kun lasting av den fÞrste ressursen fra et gitt domene, men introduserer likevel en forsinkelse. Hvis vi utfÞrer DNS-opplÞsning pÄ forhÄnd, vil vi spare tid og laste ressursen raskere.

syntaks

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

href angir domenenavnet du vil angi IP-adressen for. Kan spesifiseres med et prefiks (https://domain.com) eller uten det (//domain.com).

NÄr skal brukes

Bruk for domener som vil vÊre nÞdvendig snart Ä laste ned ressurser derfra som nettleseren ikke vet om pÄ forhÄnd. For eksempel:

  • Applikasjonen din er vert pĂ„ my-app.com og gjĂžr AJAX-forespĂžrsler til api.my-app.com: Du kjenner ikke de spesifikke spĂžrringene pĂ„ forhĂ„nd fordi de er laget dynamisk fra JS. Her er det ganske hensiktsmessig Ă„ bruke en tag for Ă„ forhĂ„ndskoble til domenet.
  • Applikasjonen din er vert pĂ„ my-app.com, og bruker Google Fonts. De lastes ned i to trinn: FĂžrst lastes CSS-filen ned fra domenet fonts.googleapis.com, sĂ„ ber denne filen om skrifter med fonts.gstatic.com. Du kan ikke vite hvilke spesifikke skriftfiler er fra fonts.gstatic.com du trenger den til du laster inn CSS-filen, sĂ„ vi kan bare lage en forelĂžpig tilkobling pĂ„ forhĂ„nd.

Bruk denne taggen for Ä Þke hastigheten pÄ et tredjepartsskript eller stil litt pÄ grunn av forhÄndsetablert forbindelse.

VÊr oppmerksom pÄ lignende egenskaper som <link rel= "dns-prefetch"/> О <link rel= "preconnect">. Det er vanligvis ikke fornuftig Ä bruke dem sammen for ett domene: <link rel= "preconnect"> inkluderer allerede <link rel= "dns-prefetch"/> og mye mer. Dette kan begrunnes i to tilfeller:

  • Vil du stĂžtte eldre nettlesere?. <link rel= "dns-prefetch" /> stĂžttet av siden IE10 og Safari 5. <link rel= "preconnect"> ble stĂžttet en stund i Chrome og Firefox, men ble bare lagt til Safari i 11.1 og fortsatt ikke stĂžttet i IE/Edge. Hvis du trenger Ă„ stĂžtte disse nettleserne, bruk <link rel= "dns-prefetch" /> som backup-alternativ for <link rel= "preconnect">.
  • Du vil Ăžke hastigheten pĂ„ tilkoblinger til mer enn 4-6 domener. stikkord <link rel= "preconnect"> Det anbefales ikke Ă„ bruke med mer enn 4-6 domener, siden etablering og vedlikehold av en tilkobling er en kostbar operasjon. <link rel= "dns-prefetch" /> bruker mindre ressurser, sĂ„ bruk det om nĂždvendig.

detaljer

Valgfri tag. Nettleseren er ikke pÄlagt Ä fÞlge denne instruksjonen, sÄ det kan hende den ikke utfÞrer DNS-opplÞsning, for eksempel hvis det er mange slike tagger pÄ siden eller i andre tilfeller.

Hva er DNS. Hver server pÄ Internett har en unik IP-adresse, som ser ut som 216.58.215.78. Navnet pÄ nettstedet skrives vanligvis inn i adressefeltet til nettleseren (f.eks. google.com), og DNS-servere (Domain Name System) matcher den med serverens IP-adresse (216.58.215.78).

For Ă„ finne en IP-adresse, mĂ„ nettleseren spĂžrre DNS-serveren. Det tar 20−120 ms nĂ„r du kobler til et nytt tredjepartsdomene.

DNS er bufret, men ikke veldig pÄliteligNoen operativsystemer og nettlesere mellomlagrer DNS-forespÞrsler: dette vil spare tid nÄr du gjentar forespÞrsler, men mellomlagring kan ikke stoles pÄ. Linux Det fungerer vanligvis ikke i det hele tatt. Chrome har en DNS-buffer, men den varer bare i ett minutt. Windows Lagrer DNS-svar i fem dager.

forhÄndsgjengivelse

<link rel= "prerender"> ber nettleseren laste ned URL-en og vise den i en usynlig fane. NÄr brukeren klikker pÄ lenken, skal siden vises umiddelbart. Dette er nyttig hvis du er sikker pÄ at brukeren vil besÞke en bestemt side og Þnsker Ä fremskynde visningen.

Til tross for (eller pÄ grunn av) den eksepsjonelle effektiviteten til denne taggen, i 2019 <link rel= "prerender"> dÄrlig stÞttet i store nettlesere. Se flere detaljer. under.

syntaks

<link rel="prerender" href="https://my-app.com/pricing" />

href peker pÄ URL-en du vil begynne Ä gjengi i bakgrunnen.

NÄr skal brukes

NÄr du er virkelig sikker pÄ at brukeren vil gÄ til en bestemt side. Hvis du har en "tunnel" der 70 % av besÞkende til side A gÄr til side B, da <link rel= "prerender"> pÄ side A vil bidra til Ä vise side B veldig raskt.

Ikke bruk for mye. Pre-rendering er ekstremt dyrt nÄr det gjelder bÄndbredde og minne. Ikke bruk <link rel= "prerender"> for mer enn én side.

detaljer

Valgfri tag. Nettleseren er ikke pÄlagt Ä fÞlge denne instruksjonen og kan ignorere den, for eksempel ved en treg tilkobling eller nÄr det ikke er nok ledig minne.

For Ä spare minne Chrome utfÞrer ikke full gjengivelseOg bare forhÄndslast NoState. Dette betyr at Chrome laster inn siden og alle dens ressurser, men ikke gjengir eller kjÞrer JavaScript.

Firefox og Safari stÞtter ikke denne taggen i det hele tatt. Dette bryter ikke med spesifikasjonen, siden nettlesere ikke er pÄlagt Ä fÞlge denne instruksjonen; men fortsatt trist. Implementeringsfeil Firefox har vÊrt Äpen i syv Är. Det er rapporter om at Safari stÞtter ikke denne taggen heller.

Oppsummering

Bruk:

  • <link rel= "preload"> - nĂ„r du trenger en ressurs pĂ„ noen fĂ„ sekunder
  • <link rel= "prefetch"> - nĂ„r du trenger ressursen pĂ„ neste side
  • <link rel= "preconnect"> - nĂ„r du vet at du snart trenger en ressurs, men du vet ennĂ„ ikke den fullstendige URL-adressen
  • <link rel= "dns-prefetch"> - pĂ„ samme mĂ„te, nĂ„r du vet at du snart trenger en ressurs, men du ennĂ„ ikke kjenner den fullstendige URL-adressen (for eldre nettlesere)
  • <link rel= "prerender"> â€” nĂ„r du er sikker pĂ„ at brukere vil gĂ„ til en bestemt side, og du vil fremskynde visningen

Kilde: www.habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster