Symfony serializer

Michelle got the honours of having one of the first 3 tracks after Cal Evans his key note. She talked about her bumpy ride into serializing data and how she and her team came up with the perfect solution for their project.
For those not familiar with the concept, serializing is transforming your data into a request output format such as JSON or XML and deserialization the other way around.

JMS Serializer blackfire

Performance issues

For a big retailer in Switzerland, Michelle used the familiar JMS serializer. This turned out to be a bottleneck in their application for years as they experienced performance issues. Michelle explained the road towards their solution which resulted in a 55% overall performance gain.

To find this bottleneck, Blackfire was used. Left you see a screenshot of a JMS method being called 60.000 times in a single call.


A lot of solutions were tried: JMSSymfony serializer, Better serializer and lots of other PHP serializers. All of them are great libraries, but none of them showed any improvements. By that time the team accepted to live with this performance hit until a new GoLang developer joined.
He worked on a solution in GoLang: Sheriff. The first results were very promising. To reuse the current JMS annotations Liip created a library for generating Go structs using Sheriff out of PHP models. And at last, to make things work with the PHP application, Goridge was used. Goridge allows you to call Go service methods from PHP.

This GO + PHP approach was great and the application had a huge speed boost. But, PHP had no fair chance. So the team decided to implement the way GO uses serialization into their own open source php library: liip/serializer.


This open source library generates PHP code based on the PHP models that you specify. A separate file is generated for every version and serializer groups combination to move all logic to the code generation step. Note, they use twig to generate PHP files! By generating these files up front they speed the application. It works the same as JMS, so it should be easy to replace.


Always educative to hear how others approach the issues they encounter. In my opinion it could go a bit deeper into the serializer and what exactly made the improvements as that part was very interesting.

More insights

Address register & GEOpunt API

Have you ever had to decide whether you should use Google maps, openstreetmaps, or another GIS provider for address suggestions? If you only need Belgian addresses, be sure to read on!

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

Next.js: Just another framework?

About every 10 years, new technology emerges that brings about a change in the way we develop software. Is Next.js this new technology?

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

Laravel 10 release

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

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

Saloon - Package / SDK API integrations

API integrations for a range of services. Little to no reusable code? With Saloon you turn it into a compact/clean SDK/Package that you can reuse in all your projects and maintain in one place.

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

Codana wins Digital Champ of the year award 2022

Codana is the winner of the FeWeb Digital Champ award 2022! 

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

Life as a React developer at Codana: 1 year in service

"You can start working with us as a React developer!". Bliss! Needless to say, I was super happy to hear this! But, I had never written a line of React before.

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