Kreiptis pagalbos

Atsakome el. paštu, dažniausiai per dvi dienas.

Google reCAPTCHA tikrina šį pateikimą, kad apsaugotų nuo piktnaudžiavimo; duomenys siunčiami Google. Scenarijus įkeliamas tik atvėrus šią formą.

← Visi įrašai

Kiek iš tiesų kainuoja viso lib/ įkėlimas

Apie turinį ir jo patikrą

Šiame straipsnyje

Šios paslaugos vienintelio įėjimo failo 46 eilutė:

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

Tai 65 failai ir 1,5 megabaito, įkeliami per kiekvieną užklausą. Skaitiklio paveikslėlis, statistikos puslapis, 404 — visur tas pats. Vakar taip nutiko 20 734 kartus.

26 skaitiklių dizainų šeimos — 715 KB, naudojama viena vėliavos 189 KB · diagramos 158 KB · visa kita 470 KB šaltas, be operacijų kodų podėlio: 132 ms operacijų kodų podėlis diske: 18,2 ms operacijų kodai bendrojoje atmintyje: 0,33 ms — glob ir 65 stat kreipiniai 65 failai, 1,5 MB, 56 klasės, kiekviena užklausa

Svarbus skaičius – mažasis

Viską įkelti nuo pradžių, išjungus operacijų kodų podėlį, trunka apie 132 milisekundes. Šis skaičius reikštų problemą, bet tai ne serverio mokamas skaičius.

Kai operacijų kodai jau sukompiliuoti ir laikomi bendrojoje atmintyje, lieka katalogo sąrašas ir po vieną stat() kreipinį kiekvienam failui, nes laiko žymų tikrinimas įjungtas: 0,33 milisekundės. Esant vakarykščiam srautui, tai mažiau nei septynios darbo sekundės per visą dieną.

Tarp jų – trečias matavimas, 18,2 milisekundės, gautas, kai operacijų kodų podėlis skaitė iš disko, o ne atminties. Tai viršutinė riba, o ne tikrasis skaičius — taip būna, kai podėlis yra, bet lėtesnis už tikrąjį. Jis pateikiamas, nes tai vienintelis šilto podėlio skaičius, kurį galima išmatuoti komandų eilutėje, o apsimesti kitaip būtų lengva klaida.

Taigi tai kainuoja beveik nieko, ir beveik nieko kainuoja vien dėl kažko kito. Išjungus operacijų kodų podėlį, ta pati eilutė kainuoja keturis šimtus kartų daugiau. Tai tikra priklausomybė, apie kurią verta žinoti, užuot atradus per atnaujinimą.

Kas iš tiesų yra tuose 1,5 megabaito

Keturiasdešimt septyni procentai — 715 kilobaitų per 26 failus — yra skaitiklių dizainų šeimos. Skaitiklio paveikslėliui nupiešti reikia tiksliai vienos. Kitos 25 įkeliamos, deklaruojamos ir niekada neliečiamos.

Toliau: 189 kilobaitai vėliavų duomenų, reikalingų geografijos puslapyje; 158 kilobaitai diagramų bibliotekos, reikalingos kam nors braižant diagramą. Nė viena nedalyvauja pateikiant skaitiklio paveikslėlį – užklausą, į kurią ši paslauga atsako dažniausiai.

Matoma kaina yra atmintis, o ne laikas. Didžiausias atminties naudojimas vienai užklausai padidėja apie keturis megabaitus, ir kitaip nei operacijų kodai — bendri visiems procesams, — ši dalis mokama kiekvienai užklausai, lygiagrečiai, kiekvieno vykdytojo vienu metu.

Kažkas jau pastebėjo

glob šablonas yra lib/*.php. Jis nerekursinis, o iškart po juo yra du katalogai: lib/live/ su 229 kilobaitais ir lib/recht/ su 182 kilobaitais. Keturi šimtai kilobaitų, kurie anksčiau buvo įkėlimo kelyje, o dabar nebėra.

Jie perkelti, nes dideli ir retai reikalingi: statistikos skiltys ir teisiniai tekstai. Vienu katalogu giliau – visas mechanizmas. Nėra nuostatų, atidėto įkėlimo ar automatinio įkėlimo žemėlapio — failas arba patenka į glob, arba ne.

Tai tikras pataisymas, ir verta tai pasakyti, nes akivaizdus kitas žingsnis būtų automatinis įkėliklis, o čia jis būtų didelis pakeitimas spręsti problemą, kurią mkdir jau išsprendė dukart.

Kodėl lieka

Vienas glob – paprasčiausias galintis veikti būdas, ir įrodymai sako, kad veikia: trečdalis milisekundės mažame serveryje, eigoje, kuri privalo būti greita. Pakeitus jį atskirų failų require kreipiniais, kiekvienam naujam failui reikėtų kur nors eilutės, o pamiršta eilutė sukeltų lemtingą klaidą veikiančioje sistemoje vietoj kiek didesnio įkėlimo.

Ko iš tiesų reikia – užrašyti tai, kas nuo pradžių leido išsilaikyti: jei failas kataloge lib/ išauga, jis perkeliamas į pakatalogį ir įkeliamas su require ten, kur naudojamas. Tai taisyklė, kurios laikėsi tie du katalogai, ir iki šiol ji niekur nebuvo užrašyta.

Bendroji versija nuobodesnė už matavimą. „Viskas įkelia viską“ paprastai yra netinkama sandara, ir prieš perkuriant verta išmatuoti kainą. Čia ji – 0,33 milisekundės ir keturi megabaitai, o stebėti verta keturis megabaitus, nes jie auga su vienalaikiškumu, o milisekundės – ne.

Reklama