100 pistettä PageSpeedissä: mitä muutimme sen eteen
Latausaika on sijoitustekijä, mutta tavanomaiset neuvot auttavat harvoin. Tämä artikkeli kuvaa, mitä oikeasti muutimme omalla sivullamme, kuinka paljon mikäkin toimenpide toi ja missä käännyimme väärään suuntaan.
Tärkeimmät kohdat
- Suurin yksittäinen voitto ei tullut tiedostojen pienentämisestä vaan siitä, että 458 kilotavun kirjasto korvattiin 6 kilotavulla omaa koodia.
- Toiseksi suurin syy oli puoliksi määritetty pakkaus: palvelin pakkasi vain HTML:n, ei CSS:ää eikä JavaScriptiä.
- Arvon 1 suuruinen taittohyppy maksoi 24 pistettä – syynä jälkikäteen ladattu CSS, joka astui voimaan vasta ensimmäisen piirron jälkeen.
- Mikä toi vähiten: kuvaformaatit. Mikä toi eniten: asioiden pois jättäminen.
Lähtöarvo oli 58 sadasta puhelimella. Se ei ole huono arvo verkkosivustolle, jonka yläosassa on 3D-tehoste, mutta se on arvo, jota Google rankaisee mobiilihaussa tuntuvasti. Lopussa oli 100 pistettä tietokoneella ja 98 puhelimella, samoin 100 saavutettavuudesta.
Seuraava ei ole yleinen tarkistuslista vaan todellinen kulku – mukaan lukien kohdat, joissa erehdyimme.
Lähtötilanne
| Mittausarvo (mobiili) | ennen | jälkeen |
|---|---|---|
| Suorituskyky | 58 | 98 |
| Saavutettavuus | 95 | 100 |
| Ensimmäinen piirto | 6,1 s | 1,4 s |
| Suurin elementti näkyvissä | 11,1 s | 2,1 s |
| Siirretty yhteensä | 298 KB | 184 KB |
| siitä JavaScriptiä | 121 KB | 5 KB |
Viisi toimenpidettä, joilla todella oli merkitystä
1. Korvaa kirjasto, älä optimoi sitä
Yläosassa näkyy hiukkaspilvi 3D:nä. Sitä varten pyöri tunnettu grafiikkakirjasto – 458 kilotavua pienentämisen jälkeen. Mittaus osoitti, ettei 51 kilotavua siitä suoritettu koskaan.
Ratkaiseva näkökulma oli kysymys siitä, kuinka paljon oikeasti tarvitsemme. Osia oli yksitoista: renderoija, näkymä, kamera, geometria, materiaali ja muutama apuluokka. Kaikki nämä voi ohjelmoida suoraan selaimen grafiikkarajapintaa vasten.
Tulos: 458 kilotavusta tuli 6 kilotavua. Ulkoasu on identtinen – otimme käyttöön samat varjostimet.
2. Pakkaus oli vain puoliksi päällä
Palvelinasetuksissa pakkaus oli «päällä» – mutta rivi, joka määrää pakattavat tiedostotyypit, oli kommentoitu pois. Se on monen jakelun oletus. Tulos: pakattiin yksinomaan HTML.
Grafiikkakirjasto siis kulki linjaa pitkin pakkaamattomana. Kytkemisen jälkeen: 1243 kilotavusta tuli 251 kilotavua. Lisäksi pidämme pakatut versiot nyt valmiiksi laskettuina vieressä, jottei palvelimen tarvitse laskea uudelleen joka noudolla.
Vaiva: kaksi riviä asetuksia. Vaikutus: vajaa megatavu ensimmäistä avausta kohden.
3. Poista animaatiokirjasto kokonaan
Vierityksen aikaisiin sisääntuloihin pyöri toinen kirjasto, 114 kilotavua. Mittaus osoitti sen lisäksi aiheuttavan pakotettuja taiton uudelleenlaskentoja – se kysyi vierityksen aikana geometriaa ja pakotti selaimen laskemaan taiton uudelleen keskellä liikettä.
Korvattu IntersectionObserver-tarkkailijalla, joka vain asettaa luokan. Varsinaisen liikkeen tekee CSS. 114 kilotavua vähemmän, ei enää uudelleenlaskentoja, noin 40 riviä omaa koodia.
4. Favicon oli 205 kilotavun kokoinen
Pikkuseikka hämmästyttävällä vaikutuksella, koska se ladataan hyvin varhain. Korvattu 6 kilotavun SVG-tiedostolla, joka luotiin olemassa olevasta logosta.
Tiesitkö?
Googlen hakutuloksissa näkymiseen SVG-faviconista ei ole hyötyä – Google hyväksyy siellä vain rasterimuotoja, ja kuvan on oltava neliö, jonka sivun pituus on 48 kuvapisteen monikerta.
Se, joka siis tallentaa vain SVG:n, saa hakutuloksessa harmaan paikanpitäjän oman logonsa sijaan. Molempien ilmoittaminen rinnakkain on oikea tapa.
5. Kysy geometriaa animaatiokehyksessä
Eräs skripti luki jokaisen vieritystapahtuman yhteydessä dokumentin kokonaiskorkeuden. Tätä ominaisuutta selain ei voi vastata muistista – sen on laskettava koko sivun taitto uudelleen, keskellä vieritystä.
Siitä seuraava sääntö, joka pätee kaikkialla: lue tapahtumassa, kirjoita seuraavassa kuvassa. Ei koskaan toisin päin. Siitä lähtien sivun korkeus mitataan kerran ja muistetaan sen sijaan että sitä kysyttäisiin uudelleen kuusikymmentä kertaa sekunnissa.
Virhe, joka maksoi 24 pistettä
Päästäksemme eroon viimeisestä estävästä pyynnöstä olimme jakaneet tyylitiedoston: näkyvään alueeseen tarvittava osa tuli suoraan dokumenttiin, loput ladattiin jälkikäteen. Yleinen menettely.
Leikkauskohta oli lähdetiedoston merkinnässä, jonka takana olimme olettaneet näkyvän alueen loppuvan. Todellisuudessa sen takana olivat säännöt yläosan logolle, sen alapuolisille väleille ja sisääntuloille. Sivu siis rakentui ilman niitä ja siirtyi paikoilleen sekuntia myöhemmin.
Tulos: Cumulative Layout Shift arvolla 1,0 – ja siten 76 pistettä 100:n sijaan tietokoneella. Erityisen ikävää: paikallisesti jarrutetulla yhteydellä arvo oli 0, koska tyylitiedosto ehti sinne riittävän ajoissa. Virhe näkyi vain nopealla yhteydellä.
Opetus: joko koko tyylitiedosto dokumenttiin tai ei mitään. Osittainen upotus edellyttää, että tietää täsmälleen, mitä sääntöä näkyvällä alueella tarvitaan – eikä sitä tiedä kasvavalla sivulla koskaan pysyvästi.
Mikä toi vähän
Täydellisyyden vuoksi ne toimenpiteet, jotka ovat jokaisessa ohjeessa ja jotka meillä olivat tuskin mitattavissa:
Kuvaformaatit. Etusivullamme on tuskin lainkaan kuvia – logo on SVG-tiedosto. Siellä missä kuvia on, muunnos tietysti kannattaa; päävipuvarreksi siitä on vain kuvapainotteisilla sivuilla.
Kirjasinten pienentäminen edelleen. Isännöimme kahta kirjasinperhettä itse ja lataamme näkyvällä alueella tarvittavat ennakkoon. Lisäoptimointi olisi mahdollista mutta ei liikuta arvoa.
Palvelimen sijainti. Usein suositeltu, meidän tapauksessamme merkityksetön: aika ensimmäiseen tavuun oli jo 20 millisekuntia. Se, joka on siinä jo hyvässä asemassa, ei voita jakeluverkolla mitään.
Menettely perässä tehtäväksi
- Mittaa ennen kuin mitään muutetaan. Mobiili ja työpöytä erikseen, arvot muistiin.
- Etsi suurin siirretty tiedosto. Lähes aina se on JavaScriptiä. Kysymys ei ole siitä, miten se pienennetään, vaan siitä, tarvitaanko sitä.
- Tarkista pakkaus. Ei sitä, onko se päällä, vaan sitä, mille tiedostotyypeille.
- Laske estävät pyynnöt. Jokainen tyylitiedosto yläosassa viivyttää ensimmäistä piirtoa.
- Tarkista taittohypyt ilman jarrua. Se yksi testi, joka meiltä puuttui.
- Mittaa uudelleen jokaisen muutoksen jälkeen. Muuten ei lopussa tiedä, mikä vaikutti.
Auta minua kääntämään sivuni PageSpeed-raportti järjestykseksi. Ole ankara; älä kehu mitään. Mittausarvoni: - Mobiili: [pistemäärä], työpöytä: [pistemäärä] - LCP, TBT, CLS laitteittain: [arvot] - Suurimmat siirretyt tiedostot kokoineen: [lista] - Renderöintiä estävät pyynnöt: [lista] - Raportin ilmoitukset: [liitä teksti] Sivusta: - Miten se on rakennettu: [CMS / staattinen / sivunrakennin] - Tarvitaanko JavaScriptiä näkyvään sisältöön? [kyllä/ei] - Miten CSS toimitetaan? [ulkoisena / ennakkoon / osittain ennakkoon] Tehtävät: 1. Liitä jokainen ilmoitus syyhyn ja kerro, mihin tunnuslukuun se vaikuttaa – LCP, TBT vai CLS. 2. Järjestä toimenpiteet vaikutuksen ja vaivan suhteen mukaan. Kerro kustakin, montako pistettä se realistisesti liikuttaa ja miksi. 3. Nimeä raportin toimenpiteet, joista minun rakennustavallani ei ole käytännössä hyötyä – ja perustele sen sijaan että jättäisit ne pois. 4. Kysy jokaisesta suuresta JavaScript-tiedostosta ensin, tarvitaanko sitä, ennen kuin ehdotat pienentämistä. 5. Huomauta, jos CSS toimitetaan vain osittain ennakkoon, ja selitä, miksi se voi olla CLS:n kannalta huonompi kuin ei lainkaan. 6. Kerro, mitä minun pitäisi mitata uudelleen jokaisen muutoksen jälkeen. Älä keksi mittausarvoja.
Johtopäätös
Pistemäärä itsessään ei ole tavoite – se on mittausarvo, ei liiketoiminnan tulos. Merkitystä on sen takana olevalla kokemuksella: sivun, joka on luettavissa 1,4 sekunnin jälkeen, lukee useampi ihminen kuin sellaisen, joka tarvitsee kuusi sekuntia. Mobiiliverkon kautta tulevien kävijöiden kohdalla ero on suurempi kuin mikään tekstin optimointi.
Tie sinne kulki meidän tapauksessamme yhden toistuvan kysymyksen kautta: tarvitsemmeko tätä? Viisi kuudesta toimenpiteestä oli jonkin poistamista, ei lisäämistä.
Usein kysytyt kysymykset
Miten PageSpeed Insightsissa saavutetaan 100 pistettä?
Useimmilla verkkosivustoilla kolmen askeleen kautta: poista tai korvaa suurin JavaScript-tiedosto, kytke pakkaus todella päälle CSS:lle ja JavaScriptille, ja poista taittohypyt. Kuvaformaatit ja palvelimen sijainti ovat harvoin pullonkaula.
Kuinka tärkeä latausaika on Googlen sijoituksissa?
Se on vahvistettu tekijä mutta ei vahva – sisältö ja osuvuus painavat enemmän. Suurempi vaikutus on epäsuora: hitaat sivut keskeytetään useammin, ja tuo käytös vaikuttaa arviointiin.
Mikä on Cumulative Layout Shift ja miten se korjataan?
Mittausarvo elementeille, jotka vaihtavat paikkaansa ensimmäisen piirron jälkeen. Yleisimmät syyt: kuvat ilman kiinteitä mittoja, jälkikäteen ladatut tyylitiedostot ja kirjasimet, joiden metriikat poikkeavat voimakkaasti. Se korjataan varaamalla tila etukäteen – leveys- ja korkeustiedoilla tai kiinteällä kuvasuhteella.
Pitäisikö CSS upottaa HTML:ään?
Pienillä tyylitiedostoilla kyllä, mutta silloin kokonaan. Osittainen upotus loppujen jälkilatauksella säästää yhden pyynnön ja hankkii vastineeksi taittohyppyjä heti kun jokin näkyvän alueen sääntö puuttuu. Meillä se oli 7 kilotavua pakattuna – siihen täysi upotus kannattaa.
Kuinka paljon kirjastoista luopuminen tuo?
Meidän tapauksessamme suurimman yksittäisen erän: 458 kilotavun grafiikkakirjastosta tuli 6 kilotavua omaa koodia, lisäksi 114 kilotavun animaatiokirjasto nollaan. Kannattaako se, riippuu siitä, kuinka paljon kirjastosta oikeasti käyttää – mittaus osoittaa käyttämättömän JavaScriptin.
Markkinointi, joka pystyttää itsensä
Studio Enginen beta on auki. Varaa paikkasi ja ole mukana alusta asti.
Osallistu betaan →