objektno vs proceduarno php programiranje
8 naročnikov
8 naročnikov
Do sedaj sem si ogledal nekaj projektov. Pri vseh stran v proceduarni kodi bila mnogo hitrejša. Tudi facebook je menda večino proceduarno.
Tudi glede nepreglednosti mi ni jasno zakaj so nekateri tako proti. Ko pogledam proceduarno kodo, mi je v hipu vse jasno, pri objektnem pa ne čisto.
Verjamem da se da objektno hitreje nekaj naredit. Toda kje je resnica, je proceduarna koda res hitrejša ob predpostavki, da je kvalitetno sprogramirana?
14 odgovorov
Hitrost je relativna, oba načina se da optimizirat da sta hitra, če ne drugega, pač natlačiš N serverjev v cluster, pa je.
Pregledna pa je koda, toliko, kolikor jo programer naredi pregledno, oba načina sta lahko pregledna ali pa ne.
Pri objektnem programiranju gre za druge stvari, predvsem pa je OO programiranje človeku bolj naravno, konec koncev se tudi v življenju, vedno srečujemo z objekti.
Bi pa reku, da so razni OO framework-i, precej bolj požrešni, to se opazi, ko recimo ob prvem load-u, preden se nastavitve in koda, skompajla ali cache-ira, lahko kar par sekund traja, da se stran naloži.
Torej, pomojem se hitrosti in preglednosti, ne da neposredno primerjati.
Na živce mi gre ko začne kdo takoj pametovati kako je OO hitrejše in bolj pregledno. Se mi zdi da gre tu bolj za to da bo nekdo vedno hvalil tisti način, v katerem on dela. Podobno kot začne kak ASP programer blatit PHP.
Niti ne, objektno orientirano je definitivno bolj prikladno za razširitve, nadgradnje, če pravilno programiraš je tudi bolj jasno in točno veš kje iskat določeno kodo. Ne kot pri proceduralnem, kjer ni tipičnih lokacij določenih funkcij itd. OO programiranje je bolj primerno za večje projekte, ki se bodo še razvijali. V tem primeru izbereš tudi določen framework. Kar se pa tiče manjših programčkov, pa ni sile, se na hitrco sprogramira brez kakih objektov in podobne navlake, ki bi samo komplicirale stvari. Vsako stvar izbereš glede na potrebo... Moraš pa vedeti da za večji projekt je OO programiranje nuja. Kar se tiče pa facebooka, bi me pa ekstremno presenetilo, če bi res vse skupaj skodirali neobjektno... ne vem od kje ti ta informacija.
P.S. Tebi ni jasno ko pogledaš tako kodo, ker ne poznaš Objektno orientiranega programiranja, oz. ne programiraš tako... Preberi si malce o objektnem programiranju. Vse je lepo pošlihtano. Kot da bi imel ropotarnico kjer je vse sicer pospravljeno na neko mesto, vendar ni standardizirano, kje je kaj... drugo pa je omara s policami in vse police so lepo pošlihtane in označene, te stvari so tukaj, te tukaj, te tukaj.
Malo poguglaj in boš videl, da je Facebook večinoma neobjektno. Enkrat je celo krožil del njihove kode po blogih, ko so se jim zrušili serverji in se je izpisala koda.
Neki implyi da je tako so res na internetu, vendar to je iz leta 2007... vmes je prišlo že kar nekaj verzij facebooka ven. Dvomim da se še vedno držijo istega kot pijanec plota. Kakorkoli, tudi če je tako, je to njihov problem, kako kodirajo svojo aplikacijo. Kakor je tvoj problem, kako kodiraš svojo. Če se znajdeš v svoji proceduralni kodi in se ti ne da učiti objektno orientirane, prav, tvoja odločitev. V večini firm pa se programira objektno.
Hitrost izvajanja je povezana z ogromno stvarmi... od strežnika, podatkovne baze, programskega jezika, pa do izbire frameworka, kako zahtevne operacije izvajaš itd. In ti so veliko bolj pomembni kot tvoj OO ali proceduralni način programiranja...
pa saj lahko narediš nek simpl test
npišašeš funkcijo, ki se 100.000 krat zaloopa čez nekaj in meriš čas. To napišeš kot proceduro potem jo pa še v class vržeš.
Kolikor vem je minimalna razlika v prid proceduram. Samo kot so že zgoraj omenili, da bi za ta minimalen bonus pri hitrosti šel delat s procedurami? Ne vem, bi moral imet pa res neko noro kritično situacijo (tako kot očitno FB, ki je cel svoj "compiler" spisal ;) ).
No sam delam v C# kjer pa itak nimaš neke izbire in je vse OOP :)
Debata o hitrosti je popolnoma nepotrebna. Kaj ti pomaga mikrosukunda, ko pa izvajaš isti query na bazo, ali pač na nek drug zunanji resource (datoteka, service) in traja zadeva 0.1s?
Pri OOP gre za koncept, ne za hitrost. O tem, kaj naj uporabljaš, gre za pravilo palca: če delaš 100-vrstično skripto, ki jo boš uporabil 3x in potem zavrgel, je objekten pristop odveč, za kaj več pa lahko hitro pokaže svoje prednosti. Pred tem pa moraš seveda objektno programiranje razumeti. Če ti samo namečeš funkcije v objekte in s tem dobiš neke skupine funkcij (module), je to še vedno proceduralno programiranje.
Freakman: očitno se ne spoznaš kaj dosti na PHP, ker ima zelo soliden OO model.
poznam PHP precej dobro, problem je da so OOP dodali, da bi kao zadovoljili fanatikom :D
npr poglej si Ruby, to je pravi OOP jezik...
Pri optimalno napisani najbrž kodi ni večjih razlik v hitrosti izvajanja. Tudi če pride do razlik, so tako majhne, da v 'vsakdanjih' programih to ni pomembno, ker lahko z optimizacijo svoje kode najbrž dosežeš veliko več, kot pa da zamenjaš način programiranja.
Če že obvladaš ne-OOP, potem ne izgubljaj časa z učenjem OOP, če si pa začetnik in se še odločaš, se pa raje loti OOP.