paint-brush
Illuminate Collections vs PHP Arrayspateikė@halexmorph
641 skaitymai
641 skaitymai

Illuminate Collections vs PHP Arrays

pateikė Jacob Landry6m2024/10/25
Read on Terminal Reader

Per ilgai; Skaityti

„Laravel“ kolekcijos apima sudėtingas masyvo peržiūras, todėl jas nepaprastai lengva skaityti ir suprasti. Labai lengva nuvertinti kodo rašymo svarbą išraiškingesne kalba, bet kai tai įpratai, sunku įsivaizduoti, kaip kas nors kitas yra priimtinas.
featured image - Illuminate Collections vs PHP Arrays
Jacob Landry HackerNoon profile picture

Nekenčiantys žmonės visada naudojo PHP dėl įvairių priežasčių, tačiau vienas iš paprasčiausių tikslų yra tai, koks bjaurus gali būti kodas. Kai kurie žmonės gali nesutikti, kad kodo švarumas ir „dailumas“ yra svarbūs, bet kai kalbama apie ilgalaikį kodų bazių palaikymą, galite sutaupyti daug laiko savo komandai, turėdami kodą, kurį lengva skaityti.


Dirbdamas „Apple“ sukūriau finansų programų, kurias naudoja vidinės suinteresuotosios šalys, ekosistemą. Bėgant metams aš nuolat įtraukdavau naujus kūrėjus į įrankius, kurie padėtų atlikti bendrą priežiūrą ar patobulinimus. Vienas iš svarbiausių to meto dalykų yra tai, kaip svarbu mokėti skaityti savo kodą natūralia kalba.


Įdomu pastebėti, kad dauguma kodų yra parašyti taip, kad jūs turite perskaityti didelę jo dalį, tada grįžti į pradžią, kad suprastumėte, kas vyksta. Rašant kodą naudojant išraiškingesnę kalbą ar API, gali labai sutrumpėti naujų kūrėjų priėmimo ir įsibėgėjimo laikas.


Čia kolekcijos spindi. „Laravel“ kolekcijose atliekamos sudėtingos masyvo peržiūros, todėl jas nepaprastai lengva skaityti ir suprasti. Jūsų kodas tampa komandų grandine, pavyzdžiui: „Filtruokite šį masyvą tik į žodžius, prasidedančius raide a, tada susiekite išlaidų sumą su eilute ir galiausiai sumažinkite ją iki visų išlaidų sumos“. Labai lengva nuvertinti kodo rašymo svarbą išraiškingesne kalba, bet kai tai įpratai, sunku įsivaizduoti, kaip kas nors kitas yra priimtinas.


Žinoma, skaitomumas negali nukentėti našumo sąskaita, todėl svarbu užtikrinti, kad visada priimtume teisingą pasirinkimą ir pirmenybę teikiame skaitomumui tik ten, kur tai tinkama. Visada turėtume suprasti, kas vyksta užkulisiuose, ir puikiai suvokti, su kokiais kompromisais susiduriame, priimdami sprendimus. Mūsų kodui nėra jokios naudos, jei jis užtrunka visa sekunde ilgiau nei mažiau skaitomas sprendimas.


Pasinerkime ir nuodugniai pažvelkime į PHP masyvus ir kolekcijas bei palyginkime jų našumą.

Skaitomumas Laravel kolekcijos

Vienas didžiausių „Laravel Collections“ naudojimo pranašumų yra sklandi sintaksė, leidžianti sujungti grandininius metodus. Taip gaunamas švarus ir skaitomas kodas, nes galite atlikti kelias operacijas iš eilės nereikalaujant laikinųjų kintamųjų ar sudėtingų įdėtųjų funkcijų iškvietimų.


Palyginkime kai kurias dažniausiai naudojamas masyvo manipuliavimo funkcijas, kad pamatytume, kaip PHP palyginama su kolekcijomis labai paprastame pavyzdyje.

Filtruoti

PHP

 array_filter($data, function($row) { return substr($row, 0, 1) === "a"; });


Kolekcijos

 $data->filter(function($row) { return substr($row, 0, 1) === "a"; });

Ieškoti

PHP

 array_search(function($row) { return substr($row, 0, 1) === "a"; }, $data);


Kolekcijos

 $data->search(function($row) { return substr($row, 0, 1) === "a"; });

Žemėlapis

PHP

 array_map(function($row) { return "test"; }, $data);


Kolekcijos

 $data->map(function($row) { return "test"; });

Rūšiuoti

PHP

 sort($data);


Kolekcijos

 $data->sort();

Kiekvienas

PHP

 foreach($loop as $item) { $doSomething = true; }


Kolekcijos

 $data->each(function($row) { return "test"; });

Sumažinti

PHP

 array_reduce($data, function($carry, $row) { return $carry + strlen($row); });


Kolekcijos

 $data->reduce(function($carry, $row) { return $carry + strlen($row); });

Sujungimas

PHP

 array_splice($data, count($data)/2);


Kolekcijos

 $data->splice(count($data)/2);


Visi kartu (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); });


Visi kartu (kolekcijos)

 $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); });


Palyginimas

Taikant tokį paprastą metodą, neatrodo, kad būtų didžiulis kompromisas dėl kiekvienos atskiros funkcijos skaitomumo, nors pažvelgę į pavyzdį, kai jums reikia juos visas pritaikyti vienam masyvui, aiškiai matote, kad tai yra daugiau glausta ir lengviau skaitoma, kai rinkinyje naudojami grandininiai metodai.


Užuot nuolat turėję perrašyti savo kintamąjį ir pabaigoje nustatyti naują išvesties kintamąjį, galime tiesiog sujungti kiekvieną komandą, kol pasieksime norimą išvestį. Rinkinius tikrai lengviau skaityti, kuo sudėtingesnis tampa jūsų kodas.

Spektaklis

Aš paėmiau aukščiau pateiktus pavyzdžius ir sugeneravau kai kuriuos bandymo duomenis, kad pamėginčiau nustatyti, ar kolekcijos buvo daugiau ar mažiau našios nei standartinės PHP funkcijos.


Kiekviename masyve buvo 100 000 atsitiktinių eilučių, o kiekvieną funkciją vykdžiau 100 kartų. Galų gale apskaičiavome visų atsakymo laikų vidurkį.


Galutiniai rezultatai pateikiami žemiau:

 ========== 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 =======================

Išvada

Kaip aiškiai matote, nors iš kolekcijų gauname daug aiškumo, kai kuriose pagrindinėse srityse prarandame didelį našumą.


Filtras , žemėlapis , Foreach ir Reduce yra greitesni naudojant standartines PHP funkcijas. Foreach ir Reduce iš tikrųjų yra neįtikėtinai reikšmingi skirtumai. Paieška , rūšiavimas ir sujungimas rodo kolekciją kaip nugalėtoją, o Rūšiavimas iš tikrųjų sutaupo daug laiko.


Taip pat svarbu pažymėti, kad kiekvieną kolekciją turėsite sukurti iš sukurto masyvo, kuris šiek tiek prideda prie kolekcijos nustatymo pradžios, tačiau net ir įdedant nedidelį papildomo darbo ir laiko kiekį, rezultatai yra gana aiškus.


Mano nuomone (ir tai tik nuomonė, pagrįsta šiais rezultatais), jei našumas kelia didžiulį susirūpinimą, aš tikrai pasilikčiau su standartine PHP funkcija Foreach kilpoms ir greičiausiai tokia pati, kai reikia Reduce . Jei reikia rūšiuoti didelius duomenų rinkinius, kolekcijos yra tinkamas būdas. Likusieji yra taip arti, kad atrodo, kad tai yra asmeninis pasirinkimas.


Tuo metu sakyčiau, kad kolekcijas visada lengviau skaityti ir prižiūrėti.


Akivaizdu, kad turėtumėte pasinaudoti šia informacija ir priimti pagrįstą sprendimą, tačiau, jei esate panašus į mane, manau, kad atsidursite kolekcijose dėl daugelio aukščiau išvardytų funkcijų. Tačiau manau, kad toliau naudosiu →each ir →reduce !

L O A D I N G
. . . comments & more!

About Author

Jacob Landry HackerNoon profile picture
Jacob Landry@halexmorph
Senior Software Engineer On an exciting journey to learn new things all the time.

PABAIGTI ŽYMES

ŠIS STRAIPSNIS BUVO PRISTATYMAS...