Hatigrenýänler elmydama dürli sebäplere görä PHP-ni basýarlar, ýöne iň aňsat nyşanlaryň biri koduň näderejede erbet bolup biljekdigi. Käbir adamlar kod arassalygynyň we “owadanlygyň” möhümdigi bilen ylalaşman bilerler, emma kod kodlaryny uzak möhletleýin saklamak barada aýdylanda, okamak aňsat kod bilen toparyňyzy köp wagt tygşytlap bilersiňiz.
“Apple” -de wagtym içerki gyzyklanýan taraplar tarapyndan ulanylýan maliýe programmalarynyň ekosistemasyny döretdim. Theyllaryň dowamynda umumy tehniki hyzmat ýa-da gowulandyrmalara kömek etmek üçin gurallara täze işläp düzüjileri yzygiderli münýärdim. Şol döwürdäki iň möhüm meseleleriň biri, koduňyzy tebigy dil bilen okamagyň nähili möhümdigi.
Kodlaryň köpüsiniň şeýle bir görnüşde ýazylandygyny görmek gyzykly, onuň ep-esli bölegini okamaly, nämäniň bolup geçýändigine doly düşünmek üçin başlangyç yza gaýdyp gelmeli. Kod ýazýan wagtyňyzda has täsirli dil ýa-da API-ler ulanmak, täze işläp düzüjileriň uçuş we uçuş wagtyny ep-esli azaldyp biler.
Kolleksiýalar şöhle saçýar. “Laravel” kolleksiýalary çylşyrymly massiw gezelençlerini alyp, olary okamak we düşünmek üçin aňsatlaşdyrýar. Koduňyz “Bu massiwi diňe a bilen başlaýan sözlere süzüň, soňra çykdajylaryň hataryna karta ediň we iň soňunda ähli çykdajylaryň jemine çenli azaldyň” ýaly okalýan buýruklar zynjyryna öwrülýär. Koduňyzy has täsirli dil bilen ýazmagyň ähmiýetini düşündirmek gaty aňsat, ýöne endik edeniňizden soň, başga bir zadyň nädip kabul edilip bilinjekdigini göz öňüne getirmek kyn.
Elbetde, okamak mümkinçiligi ýerine ýetirişiň hasabyna gelip bilmeýär, şonuň üçin elmydama dogry saýlaýandygymyzy we diňe zerur bolan ýerlerde okalmagy ileri tutýandygymyzy üpjün etmek möhümdir. Sahnanyň aňyrsynda nämeleriň bolup geçýändigine hemişe düşünmelidiris we çözgütlerimize çemeleşişimizde haýsy söwda söwdasy bilen ýüzbe-ýüz bolýandygymyzy doly bilmelidiris. Az okalýan çözgütden doly sekunt gerek bolsa, kodumyzyň okalmagy gowy däl.
Geliň, PHP massiwlerine we kolleksiýalaryna içgin seredeliň we ikisiniň arasyndaky öndürijiligi deňeşdireliň.
“Laravel” kolleksiýalaryny ulanmagyň iň uly artykmaçlyklaryndan biri, zynjyr usullaryna mümkinçilik berýän erkin sintaksisdir. Bu arassa we okalýan kody döredýär, sebäbi wagtlaýyn üýtgeýjilere ýa-da çylşyrymly öýjükli çagyryşlara mätäç bolmazdan yzygiderli birnäçe amallary ýerine ýetirip bilersiňiz.
PHP-iň kolleksiýalar bilen deňeşdirilişini gaty ýönekeý mysalda görmek üçin aşakda köp ulanylýan massiw manipulýasiýa funksiýalaryny deňeşdireliň.
PHP
array_filter($data, function($row) { return substr($row, 0, 1) === "a"; });
Kolleksiýalar
$data->filter(function($row) { return substr($row, 0, 1) === "a"; });
PHP
array_search(function($row) { return substr($row, 0, 1) === "a"; }, $data);
Kolleksiýalar
$data->search(function($row) { return substr($row, 0, 1) === "a"; });
PHP
array_map(function($row) { return "test"; }, $data);
Kolleksiýalar
$data->map(function($row) { return "test"; });
PHP
sort($data);
Kolleksiýalar
$data->sort();
PHP
foreach($loop as $item) { $doSomething = true; }
Kolleksiýalar
$data->each(function($row) { return "test"; });
PHP
array_reduce($data, function($carry, $row) { return $carry + strlen($row); });
Kolleksiýalar
$data->reduce(function($carry, $row) { return $carry + strlen($row); });
PHP
array_splice($data, count($data)/2);
Kolleksiýalar
$data->splice(count($data)/2);
Hemmesi bilelikde (PHP)
$data = array_filter($data, function($row) { return substr($row, 0, 1) === "a"; }); $data = array_search(function($row) { return substr($row, 0, 1) === "a"; }, $data); $data = array_map(function($row) { return "test"; }, $data); sort($data); foreach($loop as $item) { $doSomething = true; } $sum = array_reduce($data, function($carry, $row) { return $carry + strlen($row); });
Hemmesi bilelikde (ýygyndylar)
$sum = $data->filter(function($row) { return substr($row, 0, 1) === "a"; })->search(function($row) { return substr($row, 0, 1) === "a"; })->map(function($row) { return "test"; })->sort() ->each(function($row) { return "test"; })->reduce(function($carry, $row) { return $carry + strlen($row); });
Deňeşdirme
Bu ýönekeý çemeleşme bilen, her bir aýratyn funksiýa üçin okalmakda uly söwda bolup görünmeýär, ýogsa-da olaryň hemmesiniň bir massiwde ulanylmagynyň zerurdygyny göz öňünde tutsaňyz, munuň has köpdügini görüp bilersiňiz. ýygyndyda zynjyrly usullary ulananyňyzda gysga we okamak has aňsat.
Üýtgeýjiňizi yzygiderli ýazyp, soňunda çykyş üçin täze üýtgeýjini bellemegiň ýerine, islenýän netijä gelýänçäk, her buýrugy zynjyrlap bileris. Kodlar näçe çylşyrymly bolsa, kolleksiýalary okamak has aňsat.
Aboveokardaky mysallary aldym we kolleksiýalaryň adaty PHP funksiýalaryndan has az ýerine ýetirilendigini ýa-da ýokdugyny anyklamak üçin käbir synag maglumatlary döretdim.
Her bir massiwde 100,000 tötänleýin setir bar, men her funksiýany 100 gezek işledim. Netijede, jogap beriş wagtlarynyň hemmesini ortaça hasapladyk.
Jemleýji netijeler aşakda:
========== Tests Complete (ms) ========== php filter: 5.07 collect filter: 6.49 ======================= php search: 0.79 collect search: 0 ======================= php map: 3.45 collect map: 4.18 ======================= php sort: 25.27 collect sort: 11.18 ======================= php each: 1.03 collect each: 6.96 ======================= php reduce: 2.78 collect reduce: 7.75 ======================= php splice: 1 collect splice: 0.74 =======================
Görşüňiz ýaly, Kolleksiýalardan köp mukdarda okalsa-da, käbir möhüm ugurlarda ep-esli öndürijilik ýitirilýär.
Filtr , Karta , Foreach we azaltmak adaty PHP funksiýalary bilen has çalt. Foreach we Reduction hakykatdanam ajaýyp ähmiýetli tapawutlar. Gözleg , tertiplemek we bölmek kolleksiýalary ýeňiji hökmünde görkezýär we Sort aslynda köp wagt tygşytlaýjydyr.
Her kolleksiýany gurlan massiwden döretmeli bolmagyňyzy bellemelidiris, kolleksiýany başlamak üçin birazajyk goşant goşýar, ýöne az mukdarda goşmaça iş we wagt bilen hem netijeler bolýar gaty düşnükli.
Meniň pikirimçe (we bu netijelere esaslanan pikirdir), öndürijilik uly alada döredýän bolsa, Foreach aýlawlary üçin adaty PHP funksiýasyna ýapyşaryn we islendik azaltmak zerurlygy üçin birmeňzeş bolmagy mümkin. Uly maglumat bazalarynda haýsydyr bir tertipleşdirmeli bolsaňyz, kolleksiýalar dogry ýol. Galanlary şeýle bir ýakyn welin, hakykatdanam şahsy isleg ýaly duýulýar.
Şonda kolleksiýalary okamak we goldamak elmydama aňsat diýýärin.
Elbetde, bu maglumatlary almaly we özüňe habarly karar bermeli, ýöne, meniň ýaly bolsaň, ýokardaky bu funksiýalaryň köpüsi üçin kolleksiýalary ýitirip başlarsyň öýdýärin. Iöne meniň pikirimçe →each
ulanmaga jaň ederin we appropriate öňe gidýän ýerinde →reduce
!