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

Adressen register & GEOpunt API

Zelf al eens voor de keuze gestaan of je Google maps, openstreetmaps, of een andere GIS provider zou moeten gebruiken voor adres suggesties? Mocht je enkel Belgische adressen nodig hebben, lees dan zeker verder!

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
Logo vlaamse overheid

Next.js: Het zoveelste framework?

Zowat om de 10 jaar komt er nieuwe technologie boven drijven, die een verandering teweeg brengt in de manier waarop we software ontwikkelen. Is Next.js deze nieuwe technologie?

Auteur: Dries Cappon
UX, Design, React.js, Next.js
Dries Cappon
Next.js

Laravel 10 release

The release of Laravel 10: The king of types. Alles wat je moet weten over de nieuwe major release!

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
laravel 10 banner

Saloon - Package / SDK API integrations

API integraties voor een waaier aan services. Weinig tot geen herbruikbare code? Met Saloon maak je er een compacte / overzichtelijke SDK/Package van die je kan hergebruiken in al je projecten en kan maintainen op 1 plek.

Auteur: Noah Gillard
PHP / Laravel Developer
Noah Gillard AI generated Face
Saloon hero image

Codana wint Digital Champ of the year award 2022

Codana is de winnaar van de FeWeb Digital Champ award 2022

Auteur: Joris De Groot
Strategic Director and Managing Partner
Joris De Groot
FeWeb Digital Champ award Codana

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