Skip to content
Insights

Advanced Serializing in PHP

keynote

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.

Symfony serializer

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.

JMS Serializer blackfire

Solutions?

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.

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.

Thoughts

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

  • SymfonyCon 2024: code in harmony

    The 2024 edition took place in beautiful Vienna, so one of our experts went to check it out. A quick night train journey and some culture later, they were ready to focus on two days packed with Symfony. What insights did we bring back as souvenirs? You can read all about it in this report! 

    SymfonyCon 2024: code in harmony
  • Stepping into something new: Lore’s journey at Codana

    Lore Vanderlinden tells you all about her journey at Codana. She combines her technical background as a frontend developer with a passion for entrepreneurship in her role as project manager. Find out how by reading the blog!

    Stepping into something new: Lore’s journey at Codana
  • Qodo: an AI-copiloot for coding and testing

    We recently came across Qodo: a tool that uses Artificial Intelligence (AI) to help us code and test. In this blog post, you can read all about our initial experiences. 

    Qodo: an AI-copiloot for coding and testing
  • Lunar and Codana merge into one brand

    Lunar and Codana join hands and from today will continue together under the Codana brand name. This merger creates a digital product studio with more than 30 experts and a clear ambition: to become a leading player in the Belgian and European market.

    Lunar and Codana merge into one brand
  • From Intern to Digital Project Manager: My Journey at Codana

    Jelmer Krux tells you all about his journey at Codana. He joined our team fresh out of university and combines the roles of digital project manager and UX/UI Designer. How? Find out by reading his story in this blog! 

    From Intern to Digital Project Manager: My Journey at Codana
  • Cross-platform applicaties with React Native

    Never before has developing native mobile applications been as accessible as it is today. At Codana, we do this by using the React Native, an open-source framework developed by Meta.

    Cross-platform applicaties with React Native