Obrati se podršci

Odgovaramo e-poštom, obično u roku od dva dana.

Google reCAPTCHA provjerava ovu prijavu radi zaštite od zlouporabe; podaci se šalju tvrtki Google. Skripta se učitava tek kada se otvori ovaj obrazac.

← Sve objave

Koliko zapravo košta učitavanje cijelog lib/

O sadržaju i njegovoj provjeri

U ovom članku

Redak 46 jedine ulazne datoteke ove usluge:

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

To je 65 datoteka i 1,5 megabajta koji se učitavaju pri svakom zahtjevu. Slika brojača, stranica statistike, 404 — sve isto. Jučer se to dogodilo 20.734 puta.

26 skupina dizajna brojača — 715 KB, jedna se koristi zastave 189 KB · grafikoni 158 KB · sve ostalo 470 KB hladno, bez predmemorije operacijskog koda: 132 ms operacijski kod u predmemoriji diska: 18,2 ms operacijski kod u dijeljenoj memoriji: 0,33 ms — glob i 65 poziva stat 65 datoteka, 1,5 MB, 56 klasa, svaki zahtjev

Važna je mala brojka

Učitavanje svega od nule, s isključenom predmemorijom operacijskog koda, traje otprilike 132 milisekunde. To je brojka zbog koje bi ovo bilo problem, a poslužitelj ne plaća tu brojku.

Kada je operacijski kod već preveden i čuva se u dijeljenoj memoriji, ostaje popis direktorija i jedan stat() po datoteci jer je provjera vremenskih oznaka uključena: 0,33 milisekunde. Uz jučerašnji promet to je manje od sedam sekundi rada tijekom cijelog dana.

Između je treće mjerenje, 18,2 milisekunde, provedeno kada je predmemorija operacijskog koda čitala s diska umjesto iz memorije. To je gornja granica, a ne stvarna brojka — događa se kada predmemorija postoji, ali je sporija od stvarne. Navodi se jer je to jedina topla brojka koja se može izmjeriti iz naredbenog retka, a pretvarati se drukčije bila bi laka pogreška.

Dakle, ovo ne košta gotovo ništa, a tako je isključivo zbog nečeg drugog. Isključite predmemoriju operacijskog koda i isti redak košta četiristo puta više. To je stvarna ovisnost i vrijedi znati da postoji umjesto otkriti je tijekom nadogradnje.

Što je zapravo u 1,5 megabajta

Četrdeset sedam posto — 715 kilobajta u 26 datoteka — skupine su dizajna brojača. Iscrtavanje slike brojača treba točno jednu. Preostalih 25 učitava se, deklarira i nikada ne koristi.

Zatim: 189 kilobajta podataka zastava, potrebnih na geografskoj stranici; 158 kilobajta biblioteke grafikona, potrebnih kada se nešto iscrtava kao grafikon. Nijedno ne sudjeluje u isporuci slike brojača, a to je zahtjev na koji ova usluga odgovara češće nego na bilo koji drugi.

Vidljivi trošak toga memorija je, a ne vrijeme. Vršna memorija po zahtjevu raste za otprilike četiri megabajta i, za razliku od operacijskog koda — koji je zajednički svim procesima — taj dio plaća se po zahtjevu, usporedno, za svaki radni proces odjednom.

Netko je već primijetio

Obrazac glob jest lib/*.php. Nije rekurzivan, a dva su direktorija odmah ispod njega: lib/live/ s 229 kilobajta i lib/recht/ sa 182 kilobajta. Četiristo kilobajta koji su prije bili na putu učitavanja, a sada nisu.

Premješteni su jer su veliki i rijetko potrebni: odjeljci statistike i pravni tekstovi. Cijeli je mehanizam jedan direktorij dublje. Nema konfiguracije, odgođenog učitavača ni mape automatskog učitavanja — datoteka je ili u obrascu glob ili nije.

To je stvaran popravak i vrijedi tako reći jer bi očit sljedeći korak bio automatski učitavač, a on bi ovdje bio velika promjena za rješavanje problema koji je naredba mkdir već riješila dvaput.

Zašto ostaje

Jedan obrazac glob najjednostavnije je što uopće može raditi, a dokazi pokazuju da radi: trećina milisekunde na malom poslužitelju, na putu koji mora biti brz. Zamjena pojedinačnim naredbama require po datoteci znači da svaka nova datoteka negdje treba redak, a zaboravljeni redak stvara fatalnu pogrešku u produkciji umjesto malo većeg učitavanja.

Ono što treba jest zapisati ono što mu je od početka omogućilo opstanak: ako datoteka u lib/ postane velika, premješta se u poddirektorij i učitava naredbom require ondje gdje se koristi. To je pravilo koje su ta dva direktorija slijedila i dosad nigdje nije bilo zapisano.

Opća verzija dosadnija je od mjerenja. „Sve učitava sve“ obično je pogrešan oblik i vrijedi izmjeriti koliko košta prije ponovne izrade. Ovdje košta 0,33 milisekunde i četiri megabajta, a četiri megabajta dio su koji vrijedi pratiti jer rastu s brojem istodobnih zahtjeva, a milisekunde ne.

Oglas