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

De ideale eerste werkplek

Ik ben Ward Vandevoort, 22 jaar en begin november 2021 ben ik gestart bij Codana als junior backend developer. Ontdek mijn verhaal bij Codana! 

Auteur: Ward Vandevoort
Developer
Ward Vandevoort
groepsfoto

Teambuilding met internationale collega's

Een zalige teambuilding in Antwerpen!

Auteur: Noah Gillard
PHP Developer
Noah Gillard
groepsfoto codana burgerij

Het leven als React developer bij Codana: 1 jaar in dienst

“U kan bij ons aan de slag als React developer!”. Wow, zalig! Ik was natuurlijk super blij dit te horen! Maar, ik had nog nooit een lijn React geschreven.

Auteur: Thomas Timmermans
Frontend Developer
Thomas Timmermans
Ik na 1 jaar in dienst

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