Võrgukiiruse mõõtmine PHP-ga: aeglase tulemuse põhjused ja lahendused
PHP-ga tehtud võrgukiiruse test võib näidata tegelikust väiksemat kiirust rakenduse, serveri, Wi-Fi, ruuteri või operaatori ühenduse tõttu. Artiklis käsitleme sümptomeid, kontrollimeetodeid ja praktilisi optimeerimisi.
PHP-ga võrgukiiruse mõõtmine tähendab tavaliselt faili allalaadimist või üleslaadimist ning selleks kulunud aja võrdlemist andmemahuga. Tulemus ei näita alati ainult internetiühenduse võimekust. Mõõtmist mõjutavad ka PHP seadistus, veebiserver, testserveri asukoht, ruuter, Wi-Fi ja samaaegne liiklus.
Kuidas probleem tavaliselt avaldub?
Üks levinud sümptom on see, et brauseris tehtud kiirustest näitab paremat tulemust kui PHP skript. Samuti võib allalaadimiskiirus olla mõistlik, kuid üleslaadimine väga aeglane, või muutub tulemus iga käivitusega märgatavalt.
Kui mõõtmine kestab vaid mõne sekundi või kasutab väikest faili, võib juhuslik latentsus tulemust tugevalt mõjutada. Latentsus kirjeldab andmepaketi edasi-tagasi liikumise aega, jitter selle aja kõikumist ja paketikadu ühenduse käigus kaotsi läinud pakette.
PHP skripti ja veebiserveri piirangud
Põhjus: PHP skript võib töötada piiratud protsessiaja, mälumahu või väljundipuhvri seadistusega. Kui skript loeb kogu faili enne saatmist mällu, tekib tarbetu viivitus ning suurte failide korral võib protsess katkeda.
Kontroll: Vaata üle max_execution_time, memory_limit, veebiserveri timeout'id ja kasutatav PHP versioon. Võrdle väikese ning suurema faili tulemusi ja kontrolli, kas andmeid saadetakse voona või alles pärast kogu faili laadimist.
Optimeerimine: Kasuta mõõduka suurusega testfaili, loe andmeid tükkidena ning väldi kogu sisu hoidmist mälus. Mõõda aega serveripoolselt ja arvuta kiirus baitide ning sekundite põhjal, mitte ainult kliendi laadimisaja järgi.
Testserveri asukoht ja serveri koormus
Põhjus: Kui PHP rakendus asub Eesti kasutajast kaugel või testserver on koormatud, läbib liiklus rohkem võrguühendusi. See suurendab latentsust ja võib vähendada tegelikku läbilaskevõimet, eriti väikeste failide või aeglase üleslaadimise puhul.
Kontroll: Tee sama test mitme serveriga ning märgi iga tulemuse juurde serveri asukoht. Kontrolli ka serveri protsessori-, mälu- ja võrgukoormust. Kui ainult üks sihtpunkt annab halva tulemuse, ei pruugi probleem olla koduses ühenduses.
Optimeerimine: Vali kasutajatele geograafiliselt lähedane testserver ja kasuta piisava ribalaiusega hostinguühendust. Võrdluseks võib käivitada sama faili sõltumatust Eesti või lähiriigi serverist, ilma et eeldaks konkreetse operaatori või paketi kindlat tulemust.
Wi-Fi, ruuteri ja modemi mõju
Põhjus: Wi-Fi kiirus sõltub sagedusalast, kaugusest ruuterini, seintest ja teiste võrkude häiretest. Vana ruuter või modem võib piirata kiirust ka siis, kui kaabel-, DSL- või fiiberühendus ise suudaks rohkem.
Kontroll: Korda mõõtmist Etherneti kaabliga otse ruuterist või modemist. Seejärel võrdle tulemust 5 GHz ja 2,4 GHz Wi-Fi võrgus. Kontrolli, kas ruuteris töötab samaaegselt videovoog, varundus, mäng või muu suur liiklus.
Optimeerimine: Kasuta võimaluse korral juhtmega ühendust, paiguta ruuter avatumasse kohta ja vali vähem häiritud Wi-Fi kanal. Uuenda ruuteri püsivara ning testi eraldi kaabli, Wi-Fi ja eri seadmetega.
Internetioperaatori ühendus ja liiniprobleemid
Põhjus: Operaatori ehk ISP võrgu ülekoormus, hooldustööd või liini kvaliteediprobleem võivad vähendada allalaadimis- ja üleslaadimiskiirust. DSL-ühendusel mõjutab tulemust liini pikkus ja kvaliteet, kaabelvõrgus jagatud segment ning fiiberühendusel võivad piirangud tekkida mujal võrgus.
Kontroll: Mõõda ühendust eri kellaaegadel, eelistatavalt Etherneti kaudu. Pane kirja kiirus, latentsus, jitter ja paketikadu. Kui aeglustumine kordub õhtuti või ilmneb mitmes seadmes, võrdle tulemust operaatori lubatud ühendusvahemikuga ning esita neile mõõtmislogi.
Optimeerimine: Kontrolli kaableid, ühenduspesi ja modemi signaalinäite. Püsiva kõrvalekalde korral pöördu operaatori poole ning lisa kuupäevad, serveri asukoht ja testimise viis. Ära tee järeldust ühe lühikese PHP mõõtmise põhjal.
Liiga väike fail ja lühike mõõtmisperiood
Põhjus: Väike fail lõpetab allalaadimise enne, kui ühendus saavutab stabiilse kiiruse. HTTP päised, TLS-i loomine ja TCP ühenduse algus moodustavad siis suure osa kogu mõõtmisajast.
Kontroll: Käivita test mitme failisuurusega ja korda iga mõõtmist mitu korda. Kui tulemus kasvab koos faili suurusega, mõõtis skript tõenäoliselt ühenduse käivituskulu rohkem kui püsivat läbilaskevõimet.
Optimeerimine: Kasuta testi, mis kestab piisavalt kaua, kuid ei koorma serverit põhjendamatult. Arvuta mediaan mitmest mõõtmisest ning jäta soojendus- või ühenduse loomise etapp lõpptulemusest eraldi välja.
Võrgu liiklus, paketikadu ja ebastabiilsus
Põhjus: Kodune varundus, pilvesünkroonimine või mitu aktiivset kasutajat jagavad sama ühendust. Paketikadu põhjustab kordussaateid ning jitter võib muuta ühe mõõtmise teisest oluliselt erinevaks.
Kontroll: Peata ajutiselt suurimad liikluse tekitajad ja korda testi. Võrdle järjestikuste mõõtmiste tulemusi ning jälgi, kas latentsus suureneb koormuse ajal. Vajaduse korral kasuta eraldi võrgutööriistu marsruudi ja paketikadu hindamiseks.
Optimeerimine: Tee võrdlustest ajal, mil võrk on vaba, või märgi koormus mõõtmise juurde. Ruuteri liikluse haldus võib aidata, kuid selle mõju sõltub seadmest ja ühenduse tüübist. PHP skript peaks ebastabiilsuse kuvama, mitte seda keskmise väärtusega varjama.
Kuidas saada PHP-ga usaldusväärsem mõõtmine?
- Kasuta mitut piisava suurusega testiobjekti ning väldi juhuslikult genereeritud sisu, mis koormab mõõtmise ajal serverit.
- Mõõda allalaadimist ja üleslaadimist eraldi, sest nende piirangud võivad olla erinevad.
- Salvesta iga tulemuse juurde ajamõõt, andmemaht, testserver, protokoll ja ühenduse tüüp.
- Korda testi ning kasuta keskmise asemel vajaduse korral mediaani, et üksik tipptulemus ei moonutaks tulemust.
- Võrdle PHP tulemust sõltumatu brauseripõhise testiga ja tee kontroll Etherneti kaabliga.
Kiiruse teisendamisel jaga edastatud baitide arv sekunditega ja korruta kaheksaga, et saada bitid sekundis. Megabittides esitamisel jaga tulemus veel miljoniga. Selgita kasutajale, kas näidatud väärtus on hetkeline tulemus, mediaan või pikema perioodi keskmine.
Millal tuleks probleem edasi anda?
Kui Etherneti kaudu tehtud kordustestid näitavad eri päevadel sarnast aeglust, suureneb tõenäosus, et põhjus on modemis, liinis või operaatori võrgus. Kui ainult PHP test ebaõnnestub, tasub esmalt kontrollida rakenduse, veebiserveri ja testserveri seadistust.
Korralik diagnoos eristab seega ühenduse tegelikku läbilaskevõimet mõõtmisrakenduse piirangutest. Nii saab vältida olukorda, kus ruuterit vahetatakse PHP timeout'i tõttu või pöördutakse operaatori poole serveri ülekoormuse pärast.
