Published: August 02, 2024 by Lucas Rolff
Sådan reducerede vi hjemmesidens indlæsningstid med 85% med en simpel løsning
Tidligere på ugen skrev vi om hvordan vi finder hastighedsproblemer.
I dag bringer vi et af de seneste tilfælde hvor vi har identificeret et hastighedsproblem på en hjemmeside.
Den pågældende hjemmeside blev for nyligt flyttet til vores platform. Før flytningen oplevede vi at hjemmesiden kørte langsomt. Det gjorde os selvfølgelig nysgerrige efter at finde ud af, hvad der egentligt forårsagede den langsomme indlæsning af hjemmesiden, da problemet optrådte på hver eneste side, selv sider som ellers skulle være hurtige grundet deres begrænset funktionalitet.
Når vi finder sådan noget, indikere det ofte noget som trækker hele siden ned, og til tider viser det sig at være et super nemt problem at løse.
I dette tilfælde opsatte vi en "profiling" gennem CloudLinux X-Ray, hvilket blev gjort før vi ændrede DNS for kunden, mens kunden var i testfasen for flytning.
Vi lavede et par forespørgsler på de forskellige sider og så konsekvendt svartider fra PHP på 2.5 til 3 sekunder, hver eneste gang.
Kiggede vi i CloudLinux X-Ray's "system functions" kategori, så vi dette:
Et kald til PHP-funktionen file_get_contents
, igen og igen, altid i den samme fil default.php
; i dette tilfælde foretages kaldet på linje 35, og som man kan se på billedet under kolonnen "duration", så tager hvert kald mellem 166 og 215 millisekunder.
Hvis vi åbner filen og går til linje 35, ser vi følgende kode:
Kort sagt itererer den over et array og genererer noget HTML, hvilket ikke er usædvanligt her. Men file_get_contents
til at kalde en URL virker lidt underligt. En hurtig var_dump($icon)
afslører at $icon['url']
simpelthen er en URL til et SVG-billede på samme domæne.
I dette tilfælde gør koden egentligt det at lave en inlining af SVG-billedet, men på bekostning af at lave et kald til disse URL'er for hver sidevisning i PHP.
Vi kunne løse dette problem ret nemt ved blot at ændre det til et img
-tag:
Efter vi besøgte siden igen, kunne vi bekræfte at alt stadig fungerede som det skulle, men samtidig blev siden blot indlæst på et par hundrede millisekunder, hvilket er det vi forventer for den pågældende hjemmeside.
Det tog mindre end 10 minutter fra start til slut at finde problemet, og hjemmesiden blev meget hurtigere.
Denne side har kun omkring 30.000 sidevisninger per måned, men hvis vi sparer 2-2.5 sekunder for hver sidevisning, så sparer vi alligevel en del timer hver måned.
Resultatet af 10 minutters arbejde er en gladere kunde, en side der er hurtigere som forhåbentligt øger konverteringer og forbedre SEO, om så kun en smule.