Chrome 103 er klar for betatesting og inkluderer i alle fall én større nyhet, nemlig støtte for teknologi som kalles for «Early Hints». Denne skal kunne bidra til raskere lasting av websider. Vi kommer om straks tilbake til hvordan dette fungerer. Men først litt om problemet det skal løse.
Når du laster inn en webside i nettleseren, skjer ikke dette ved at det sendes én eneste datastrøm fra serveren til klienten, altså nettleseren. I stedet skjer dette på en måte som minner om fossefallsmetoden, at selve HTML-dokumentet lastes ned først. Så analyseres og tolkes dette, og så lastes det ned eventuelle ressurser som bilder, fonter og filer med Javascript og stilsett, enten fra samme server, eller fra helt andre servere. Deretter skal dette analyseres og tolkes, og kanskje oppdages det at det er behov for å laste ned enda flere ressurser.
Dermed kan det måtte gjøres temmelig mange forespørsler som om nedlasting av filer som må gjøres før alt innholdet på en webside har blitt tilgjengelig for nettleseren.
Dette tar tid.
Ikke bare tar det tid å overføre hver av filene mellom serveren og nettleseren. Serveren trenger også tid på å avgjøre hva den faktisk skal sende som respons. I tiden som går mellom nettleseren sender forespørselen og responsen fra serveren har blitt mottatt, er nettleseren ofte arbeidsledig.
Dagens mest brukte løsning
Dette har allerede blitt forsøkt løst på flere måter, blant annet med forhåndslasting («preload»). Når en nettleser har mottatt HTML-dokumentet, er det HTTP-headerne (inkludert <head>-delen av HTML-dokumentet) som tolkes først.
Med <link>-tagger i <head>, som den nedenfor kan webutvikleren be nettleseren forhåndslaste ressurser man vet at det vil være behov for for å vise websiden, allerede mens nettleseren tolker resten av HTML-dokumentet. Når det da faktisk blir behov for ressursen, er den allerede lastet ned og mellomlagret av nettleseren.
<link rel="preload" href="main.js" as="script">
Selv om slik forhåndslasting kan ha stor effekt, kan den ikke største før webserveren har behandlet ferdig forespørselen om HTML-dokumentet. Dette kan ta tid, avhengig av alt som må gjøres av for eksempel databaseoppslag og autentisering. I mellomtiden vil fortsatt nettleseren måtte vente.
Tidlige hint
For noen år tilbake foreslo en ingeniør i Fastly, Kazuho Oku, teknologien vi nevnte helt i starten av artikkelen, altså Early Hints.
Tanken med denne teknologier er at webserveren skal kunne sende nettleseren en nærmest umiddelbar, men uformell respons, før serveren går i gang med å tenke ut hva den virkelige responsen skal være.
I den uformelle responsen, som har HTTP-statuskoden 103, kan webserveren for eksempel foreslå ressurser som bør forhåndslastes av nettleseren uansett hva responsen fra servere er, for eksempel slik som dette:
HTTP/1.1 103 Early Hints
Origin-Trial: **your token**
Link: </style.css>; rel="preload"; as="style"
Link: <https://cdn.test>; rel="preconnect"
Deretter vil webservere komme med den virkelige responsen, når den har funnet ut hva denne skal være, for eksempel slik som dette:
HTTP/1.1 200 OK
Date: Fri, 27 May 2022 10:02:11 GMT
Content-Length: 1234
Content-Type: text/html; charset=utf-8
Link: </style.css>; rel="preload"; as="style"
Link: <https://cdn.test>; rel="preconnect"
<!doctype html>
…
Avhengig av hvor raskt serveren greier å levere den virkelige responsen, inkludert det eventuelle HTML-dokumentet, kan slike tidlige hint om nødvendige ressurser kunne bidra betydelig til å redusere tiden det tar for nettleseren å vise websiden.
Flere nettlesere aksepterer HTTP 103-statuskoden, noe som kan testes her, men det betyr ikke at de faktisk gjør noe med innholdet.
Hva med HTTP/2 Server Push?
Det finnes allerede et alternativ i HTTP/2-spesifikasjonen som har noe av den samme effekten som Early Hints. Dette kalles for Server Push og innebærer at webserveren kan sende av gårde både HTML-dokumentet og nødvendige ressurser allerede etter den første spørringen fra nettleseren, uten at nettleseren på dette tidspunktet vet at den trenger de øvrige ressursene.
Dette kan bidra til at lastingen av websiden går enda raskere, men siden serveren ikke vet hvilke ressurser nettleseren allerede har mellomlagret, kan det også føre til at mye data overføres unødvendig.
Fastly skriver på denne siden at det i økende grad har blitt klart at Server Push ikke er den rette tilnærmingen.
Google har argumentert for å fjerne støtten for Server Push i Chrome og Chromium, blant annet fordi det er svært lite brukt og vanskelig å få til på en effektiv måte.
Foreløpig alene
Google Chrome har hatt eksperimentell støtte for Early Hints siden Chrome 95. Nå ser det ut til at det vil være støttet funksjonalitet i Chrome 103, selv om støtten foreløpig har en del begrensninger.
Trolig vil også andre nettlesere basert på Chromium-prosjektet få tilsvarende støtte for Early Hints om ikke så lenge. Det ser også ut til at Mozilla er i gang med å bygge inn støtte for Early Hints i Firefox. Apples og Webkit-teamet har derimot ikke kommet med signaler som tyder på slike planer for Safari.
For at Early Hints skal kunne fungere, må det også støttes av både webserverprogramvaren som benyttes og av hvert enkelt nettsted.