pjdevries / PIM

PHP Intelligence Meetup
0 stars 0 forks source link

Waarom verbetert een schuine streep voorvoegsel de prestaties van een PHP-functieoproep? #18

Open pjdevries opened 1 year ago

pjdevries commented 1 year ago

zie https://www.deviaene.eu/articles/2023/why-prefix-php-functions-calls-with-backslash/

HermanPeeren commented 1 year ago

Bedankt voor het vermelden van het artikel, ik vond het leuk om te lezen.

MAAR: Het artikel vermeldt niet hoeveel prestatie dan verbetert. Ik heb dat even nagemeten, met strtoupper() uit het voorbeeld en een namespace Foo\Bar. Met en zonder slash beide in een loopje 100.000x en het resultaat gedeeld door 100.000. Even grofweg vergeleken op 2 verschillende machines:

Ofwel: als je in je programma duizend van die aanroepen zou hebben van een PHP-buitlin functie, dan maakt dat totaal tussen 6 en 60 microseconden verschil en als je zo'n aanroep een miljoen keer (!) in je programma zou hebben, dan maakt het totaal tussen de 6 en 60 milliseconden verschil. Kortom: qua performance niet echt de moeite waard voor de programma's die wij in php draaien, omdat je er nog geen milliseconde performanceverbetering uit zal halen.

Dit even afgezien van dat ik enerzijds wel netter vind staan om altijd alle functies van hun namespace te voorzien, maar aan de andere kant vermeld ik die namespace dan in de use-clause bovenaan en als je dat consequent zou willen houden, dan zou je dat ook met die functieaanroepen in de globale namespace moeten doen en niet overal in de code.

Ik vat dit daarom samen als: veel gedoe over niets 😅

pjdevries commented 1 year ago

Ik kan me niet aan de indruk onttrekken, dat je vaker dan goed voor je is tijd aan de verkeerde dingen besteedt :D

HermanPeeren commented 1 year ago

Ik schrijf sinds enige tijd zelf meestal een slash voor een ingebouwde PHP-functie. Vanuit het idee, dat het beter is voor de prestatie van de code. Maar ik vind het niet mooi al die backslashes in de code (of triviale regels met de gebruikte functies bovenaan in de use-clause).

Dit issue was een aanleiding om even te kijken hoeveel prestatieverbetering dat dan oplevert en dat blijkt dus niet echt de moeite waard te zijn. Ik weet dan ook niet of ik door blijf gaan met gebruiken van die backslash overal in de code (of in de use-clause). Het heeft me dus na laten denken over notatie van m'n eigen code en dat vind ik een nuttige tijdbesteding.

De tijd die ik hier nu aan besteed heb is meer dan de totale tijd die performanceverbetering door gebruik van backslashes in globale PHP-functies me oplevert, dus in zoverre is het niet de meest efficiënte tijdbesteding 😁

roland-d commented 1 year ago

Niet te vergeten de carbon uitstoot van die test, die moet je ook meenemen in de berekening :D