Çfarë kushton realisht ngarkimi i gjithë lib/
Për përmbajtjen dhe kontrollin e saj
Në këtë artikull
Rreshti 46 i skedarit të vetëm hyrës të këtij shërbimi:
foreach (glob(__DIR__ . '/lib/*.php') as $f) { require_once $f; }
Janë 65 skedarë dhe 1,5 megabajte, të ngarkuara në çdo kërkesë. Figurë numëruesi, faqe statistikash, një 404 — njësoj. Dje ndodhi 20 734 herë.
Numri me rëndësi është i vogli
Ngarkimi i të gjithave nga e para, me memorien e ndërmjetme opcode të çaktivizuar, merr rreth 132 milisekonda. Kjo është shifra që do ta bënte problem dhe nuk është ajo që paguan serveri.
Me opcode tashmë të përpiluara dhe të mbajtura në memorien e përbashkët, mbetet lista e dosjes dhe një stat() për skedar, sepse verifikimi i kohës së ndryshimit është aktiv: 0,33 milisekonda. Me trafikun e djeshëm janë më pak se shtatë sekonda pune gjatë gjithë ditës.
Në mes është një matje e tretë, 18,2 milisekonda, me leximin e memories së ndërmjetme opcode nga disku dhe jo memoria. Është kufi i sipërm, jo shifra reale — ndodh kur memoria e ndërmjetme ekziston, por është më e ngadaltë se e vërteta. Raportohet sepse është e vetmja shifër e gjendjes së ngrohur që mund të matet nga rreshti i komandave dhe të pretendohej ndryshe do të ishte gabimi i lehtë.
Pra: kjo kushton pothuajse asgjë dhe kjo ndodh tërësisht falë diçkaje tjetër. Çaktivizojeni memorien e ndërmjetme opcode dhe i njëjti rresht kushton katërqind herë më shumë. Është varësi e vërtetë dhe ia vlen ta dini, jo ta zbuloni gjatë një përditësimi.
Çfarë përmbajnë vërtet 1,5 megabajtet
Dyzet e shtatë për qind — 715 kilobajte në 26 skedarë — janë familje dizajnesh numëruesish. Vizatimi i një figure kërkon pikërisht njërën. 25 të tjerat ngarkohen, deklarohen dhe nuk preken kurrë.
Pastaj: 189 kilobajte të dhëna flamujsh, që duhen në faqen gjeografike; 158 kilobajte bibliotekë grafikësh, që duhet kur vizatohet grafik. Asnjëra nuk përfshihet në dërgimin e figurës së numëruesit, kërkesa të cilës ky shërbim i përgjigjet më shumë se çdo tjetre.
Kostoja e dukshme është memoria, jo koha. Kulmi i memories për kërkesë rritet rreth katër megabajte dhe, ndryshe nga opcode — që ndahen mes të gjithë proceseve — kjo pjesë paguhet për çdo kërkesë, paralelisht, nga çdo proces njëherësh.
Dikush e kishte vënë re
Modeli glob është lib/*.php. Nuk është rekursiv dhe dy dosje janë pikërisht poshtë tij: lib/live/ me 229 kilobajte dhe lib/recht/ me 182 kilobajte. Katërqind kilobajte që dikur ishin në rrugën e ngarkimit dhe tani nuk janë.
U zhvendosën sepse janë të mëdha dhe duhen rrallë: seksionet e statistikave dhe tekstet ligjore. Një dosje më thellë është i gjithë mekanizmi. Pa konfigurim, pa ngarkues sipas nevojës, pa hartë autoload — skedari ose është në glob, ose nuk është.
Kjo është zgjidhje reale dhe ia vlen të thuhet, sepse hapi i dukshëm më pas do të ishte ngarkuesi automatik, ndërsa këtu ai do të ishte ndryshim i madh për një problem që një mkdir e ka zgjidhur tashmë dy herë.
Pse mbetet
Një glob i vetëm është gjëja më e thjeshtë që mund të funksionojë dhe, sipas provave, funksionon: një e treta e milisekondës në një server të vogël, në rrugën që duhet të jetë e shpejtë. Zëvendësimi me require për çdo skedar kërkon një rresht diku për çdo skedar të ri dhe rreshti i harruar prodhon gabim fatal në prodhim, jo ngarkim pak më të madh.
I duhet e dokumentuar ajo që e bëri të përballueshëm që në fillim: nëse një skedar në lib/ bëhet i madh, zhvendoset në nëndosje dhe ngarkohet me require aty ku përdoret. Ky është rregulli që ndiqnin ato dy dosje dhe nuk ishte shkruar askund deri tani.
Versioni i përgjithshëm është më i thjeshtë se matja. „Gjithçka ngarkon gjithçka“ zakonisht është modeli i gabuar dhe ia vlen të matet kostoja përpara rindërtimit. Këtu kushton 0,33 milisekonda dhe katër megabajte; katër megabajtet janë pjesa për t'u vëzhguar, sepse shkallëzohen me njëkohshmërinë, ndërsa milisekondat jo.