Võtke ühendust toega

Vastame e-postiga, tavaliselt kahe päeva jooksul.

Väärkasutuse vältimiseks kontrollib seda saadetist Google reCAPTCHA. Seejuures edastatakse andmeid Googlele. Skript laaditakse alles selle vormi avamisel.

← Kõik postitused

Mida kogu lib/ laadimine tegelikult maksab

Sisust ja selle ülevaatamisest

Selles artiklis

Selle teenuse ainsa sisendfaili rida 46:

foreach (glob(__DIR__ . '/lib/*.php') as $f) { require_once $f; }

See on 65 faili ja 1,5 megabaiti, laaditud igal päringul. Loenduri pilt, statistikaleht, 404 — kõik üks ja seesama. Eile juhtus see 20 734 korda.

26 loenduri kujunduse perekonda — 715 KB, kasutatakse ühte lipud 189 KB · diagrammid 158 KB · kõik muu 470 KB külmalt, ilma opkoodi vahemäluta: 132 ms opkoodid kettal vahemälus: 18,2 ms opkoodid jagatud mälus: 0,33 ms — glob ja 65 stat-kutset 65 faili, 1,5 MB, 56 klassi, iga päring

Oluline on väike arv

Kõige laadimine nullist, opkoodi vahemälu välja lülitatult, võtab umbes 132 millisekundit. See on arv, mis teeks sellest probleemi, ja see ei ole arv, mida server maksab.

Kui opkoodid on juba kompileeritud ja hoitud jagatud mälus, jääb alles kataloogiloend ja üks stat() faili kohta, sest ajatempli kontroll on sees: 0,33 millisekundit. Eilse liikluse juures on see kogu päeva peale alla seitsme sekundi tööd.

Vahele jääb kolmas mõõtmine, 18,2 millisekundit, mis tehti nii, et opkoodi vahemälu luges mälu asemel kettalt. See on pigem ülempiir kui tegelik arv — juhtub siis, kui vahemälu on olemas, aga aeglasem kui päris. Seda esitatakse, sest see on ainus soe arv, mida saab käsurealt mõõta, ja teisiti teeskleda oleks lihtne viga.

Seega: see maksab peaaegu mitte midagi ja maksab peaaegu mitte midagi täielikult millegi muu tõttu. Lülitage opkoodi vahemälu välja ja sama rida maksab neli sada korda rohkem. See on päris sõltuvus ja seda tasub teada, mitte avastada uuenduse ajal.

Mis tegelikult on nendes 1,5 megabaidis

Nelikümmend seitse protsenti sellest — 715 kilobaiti 26 failis — on loenduri kujunduse perekonnad. Loenduri pildi joonistamiseks on vaja täpselt ühte. Teised 25 laaditakse, deklareeritakse ja neid ei puututa kunagi.

Pärast seda: 189 kilobaiti lipuandmeid, mida vajatakse geograafialehel; 158 kilobaiti diagrammiteeki, mida vajatakse, kui miski joonistab diagrammi. Kumbki ei osale loenduri pildi teenindamises, mis on päring, millele see teenus vastab kõige rohkem.

Selle nähtav hind on pigem mälu kui aeg. Maksimaalne mälu päringu kohta kasvab umbes nelja megabaidi võrra ja erinevalt opkoodidest — mis on kõigi protsesside vahel jagatud — makstakse see osa päringu kohta, paralleelselt, iga töötaja poolt korraga.

Keegi on juba märganud

Glob on lib/*.php. See ei ole rekursiivne ja vahetult selle all asub kaks kataloogi: lib/live/ mahuga 229 kilobaiti ja lib/recht/ mahuga 182 kilobaiti. Neli sada kilobaiti, mis olid varem laadimisteel ja nüüd enam ei ole.

Need viidi ära, sest need on suured ja neid on harva vaja: statistikajaotised ja õigustekstid. Ühe kataloogi võrra sügavamal olemine on kogu mehhanism. Konfiguratsiooni, laisklaadijat ega autoload-kaarti ei ole — fail on kas globis või ei ole.

See on päris parandus ja seda tasub öelda, sest ilmne järgmine samm oleks automaatlaadija ja automaatlaadija siin oleks suur muudatus probleemi lahendamiseks, mille mkdir on juba kaks korda lahendanud.

Miks see jääb

Üks glob on lihtsaim asi, mis üldse võib töötada, ja tõendite põhjal see töötab: kolmandik millisekundit, väikesel serveril, teel, mis peab olema kiire. Selle asendamine faili-kaupa require-ga tähendab, et iga uus fail vajab kuskil rida ja unustatud rida põhjustab toodangus fataalse vea, mitte natuke suuremat laadimist.

Mida see vajab, on see, mis selle üldse talutavaks tegi, üles kirjutatud: kui fail kaustas lib/ läheb suureks, viiakse see alamkataloogi ja nõutakse seal, kus seda kasutatakse. See on reegel, mida need kaks kataloogi järgisid, ja seda ei olnud kuskile kirjutatud kuni praeguseni.

Üldine versioon on igavam kui mõõtmine. „Kõik laadib kõike“ on tavaliselt vale kuju ja enne selle ümberehitamist tasub mõõta, mida see maksab. Siin maksab see 0,33 millisekundit ja nelja megabaiti ning need neli megabaiti on osa, mida tasub jälgida, sest need skaleeruvad samaaegsusega ja millisekundid mitte.

Reklaam