Symfony serializer

Michelle kreeg de eer om een van de eerste 3 tracks na Cal Evans zijn key note vol te spreken. Ze sprak over haar moeilijke weg naar het serialiseren van gegevens en hoe zij en haar team de perfecte oplossing voor hun project hebben bedacht. Voor wie niet vertrouwd is met het concept, is serialiseren het omzetten van je data in een request output formaat zoals JSON of XML en deserialisatie andersom.

JMS Serializer blackfire

Performance issues

Voor een grote retailer in Zwitserland, gebruikte Michelle de bekende JMS-serializer. Dit bleek jarenlang een knelpunt te zijn in hun toepassing, omdat ze problemen ondervonden met de prestaties. Michelle ontwierp een oplossing die resulteerde in een algemene prestatiewinst van 55%.

Om de bottleneck te vinden werd gebruik gemaakt van Blackfire. Hiernaast zie je een screenshot van een JMS-methode die 60.000 keer in één keer wordt aangeroepen.

Oplossingen?

Er zijn veel oplossingen geprobeerd: JMSSymfony serializer, Better serializer en veel andere PHP-serializers. Dat zijn allemaal geweldige bibliotheken, maar geen van hen toonde enige verbeteringen. Tegen die tijd accepteerde het team om te leven met deze prestatiedrain totdat een nieuwe GoLang ontwikkelaar zich aansloot.
Hij werkte aan een oplossing in GoLang: Sheriff. De eerste resultaten waren veelbelovend. Om de huidige JMS-annotaties te hergebruiken, heeft Liip een bibliotheek gemaakt voor het genereren van Go structs met behulp van Sheriff uit PHP modellen. En om het eindelijk te laten werken met de PHP applicatie werd Goridge gebruikt. Goridge stelt je in staat om Go servicemethoden aan te roepen vanuit PHP.

Deze GO + PHP aanpak was geweldig en de applicatie had een enorme snelheidsboost. Maar, PHP had geen eerlijke kans. Dus besloot het team om de manier waarop GO serialisatie gebruikt te implementeren in hun eigen open source PHP-bibliotheek: liip/serializer.

liip/serializer

Deze open source library genereert PHP code op basis van de opgegeven PHP-modellen. Er wordt een apart bestand gegenereerd voor elke combinatie van versies en serializer-groepen om alle logica te verplaatsen naar de stap van de codegeneratie. Let op, ze gebruiken twig om PHP-bestanden te genereren! Door het genereren van deze bestanden op voorhand versnellen ze de applicatie. Het werkt hetzelfde als JMS, dus het moet gemakkelijk te vervangen zijn.

Gedachten bij deze sessie

Het is altijd leerzaam om te horen hoe anderen de problemen die ze tegenkomen benaderen. Naar mijn mening mag het wat dieper ingaan op de serializer en wat de verbeteringen precies zijn, want dat deel was erg interessant.

More insights

Nova 4.0 is er!

De belangrijkste nieuwigheden uitgelicht.

Auteur: Noah Gillard
PHP Developer
Noah Gillard
Thumbnail Blog Nova 4 Release Codana Styled

Laracon Online Winter 2022

Wat zijn de key take aways?

Auteur: Tom Van den Eynden
Senior PHP developer
Tom Van den Eynden
Laracon winter 2022 Codana Banner

Say hello to Laravel 9!

Je leest het goed, Laraval 9 is er! 🚀

Auteur: Joris Vercammen
Developer
Joris Vercammen
Laravel 9

Codana is officiële Laravel partner

We zijn Laravel Diamond partner en sponsor

Auteur: Joris De Groot
Strategic Director and Managing Partner
Joris De Groot
Laravel logo purple Codana

Digitale apps voor educatieve versnelling

Wat is een succesvolle e-learning app?

Auteur: Joris De Groot
Strategic Director and Managing Partner
Joris De Groot
Girl learning

Van stagiair naar collega

12 weken stage en dan meteen starten in deze toffe job!

Auteur: Noah Gillard
PHP Developer
Noah Gillard
Codana workshop