magic __get __set
Pagina: « vorige 1 2 3 4 volgende »
Daarnaast zie je het ook in weinig (geen volgens mij?) andere talen terug. Performance verschil is sowieso verwaarloosbaar.
Ik kan me overigens ook niet echt voorstellen dat magic functions zo bijster veel geheugen gebruiken, maar dat zou je ook kunnen benchmarken :)
Gewijzigd op 02/02/2013 10:14:03 door kees Schepers
Ik weet goed dat dit topic puur over getters en setters gaat.
Toch loopt in dit topic een klein rood lijntje over performance.
Dus tijdens het lezen ben ik daar eens over na gaan denken, en had een tijdje geleden eens een interview gezien met Rasmus Lendorf. Neem aan dat jullie weten wie dat is, maar mocht dat nog niet duidelijk zijn dat is die rakker die de eerste steen heeft gelegd wat betreft php.
In dat interview werd gevraagd wat zijn mening was over phpHipHop.
Dat is het php platform waar het welbekende bakkusboek op draait.
Het voordeel van dit php platform is dat het een stuk sneller zou zijn.
Aan de andere kant was zijn mening voor every day programming het een stuk lastiger was om php hiphop te installeren.
Dus als je/we toch iets aan het maken zijn wat echt performance nodig heeft (hoewel ik betwijfel of dat met een klein servertje voordeel heeft) zou het misschien wel een optie zijn als het allemaal wat serieuzer word.
Ik zal van de week eens een poging wagen om een installatie van phpHipHop te doen.
Mocht ik daarin slagen, dan zal ik mijn bevindingen daarover met jullie delen.
Koen Vlaswinkel op 02/02/2013 11:25:21:
Ik heb even gebenchmarkt en de 'normale' getters en setters zijn ongeveer 120% sneller dan magic methods op een Linux server:
Uhm, dat is wel een heel creatieve methode van het gebruik van procenten. Normale getters en setters zijn dus ongeveer 16% sneller zou een betere conclusie zijn.
Uhmm, ((20 - 19) / 19) * 100% = ±5% sneller
Wouter J op 02/02/2013 12:29:21:
Uhmm, ((20 - 19) / 19) * 100% = ±5% sneller
Ik weet niet waar jij 19 vandaan haalt:
((20 - 16) / 16) * 100% = ±25% sneller
Maar de test varieert tussen de 102-155% met de magic, dus de normale getters en setters zijn sowieso sneller.
Gewijzigd op 02/02/2013 12:51:27 door - Raoul -
Koen, ja sorry je hebt gelijk.
Koen Vlaswinkel op 02/02/2013 11:25:21:
Hoe heb je dit getest? Welke code heb je gebruikt en hoe vaak heb je die uitgevoerd?
https://github.com/WouterJ/PHPbench) en daarvoor heb ik deze code gebruikt. Ik heb de code een stuk of 20 keer uitgevoerd, maar dat legt PHPBench niet automatisch vast, dus heb ik ongeveer het gemiddelde genomen in dit screenshot. Ik heb resultaten van 102% tot 155% tegenover 100% gehad.
Ik heb Wouter J's PHPBench gebruikt (Gewijzigd op 02/02/2013 15:36:53 door Koen Vlaswinkel
Maar... heb je het niet in een loop gegooid zodat het bijvoorbeeld 1000 keer wordt uitgevoerd? Heb je het telkens maar 1x uitgevoerd?
Ja, dat wel, ik kan het nog eens testen met een loop.
Ja, zoiets moet je juist testen met een loop! Bijvoorbeeld 100.000 keer de code uitvoeren. Pas dan krijg je een beetje zinnige resultaten namelijk.
Magic vs Getters and setters
100% vs 104%
107% vs 100%
185% vs 100%
108% vs 100%
136% vs 100%
116% vs 100%
118% vs 100%
119% vs 100%
167% vs 100%
133% vs 100%
Vreemd... er zitten een paar hele grote verschillen tussen... je omgeving lijkt niet heel stabiel :)
Maar het is wel duidelijk dat normale getters en setters meestal sneller zijn dan de magic method __get en __set.
Yep... dat is zeker waar...
... Maar het verschil is verwaarloosbaar....
Inderdaad, dit is geen verschil in een serieuze orde van grootte, nog geen factor 2.
Wanneer zouden er eigenlijk WEL merkbare verschillen optreden? Vanaf welke factor?