Skip to content

Commit 5016771

Browse files
committed
minor symfony#12825 [Serializer] add caution for normalize Datetime object with GetSetMethodNormalizer (spike31)
This PR was merged into the 3.4 branch. Discussion ---------- [Serializer] add caution for normalize Datetime object with GetSetMethodNormalizer I noticed an issue with the GetSetMethodNormalizer, not a real issue, but just a warning about its use. If we normalize an object which returns a Datetime, without defining the DatetimeNormalizer; on many objects at the same time, we explode the memory of PHP and time of use. Example : ```php $serializer = new Serializer([new GetSetMethodNormalizer()]); $objects = []; for ($i = 0, $n = 100;$i<$n; $i++) { $objects[] = new MyObject(new \DateTime('now')); } $serializer->normalize($objects); dd('memory_get_peak_usage', (memory_get_peak_usage(true) / 1024 / 1024) . ' MiB'); ``` "memory_get_peak_usage" "46 MiB" ```php $serializer = new Serializer([new DateTimeNormalizer(), new GetSetMethodNormalizer()]); $objects = []; for ($i = 0, $n = 100;$i<$n; $i++) { $objects[] = new MyObject(new \DateTime('now')); } $serializer->normalize($objects); dd('memory_get_peak_usage', (memory_get_peak_usage(true) / 1024 / 1024) . ' MiB'); ``` "memory_get_peak_usage" "14 MiB" ------ For i = 1000 => 334 Mib 🌊 Commits ------- 369ea13 add caution for datetime object
2 parents 29e448a + 369ea13 commit 5016771

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

serializer.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ Custom normalizers and/or encoders can also be loaded by tagging them as
116116
:ref:`serializer.encoder <reference-dic-tags-serializer-encoder>`. It's also
117117
possible to set the priority of the tag in order to decide the matching order.
118118

119+
.. caution::
120+
121+
Always make sure to load the ``DateTimeNormalizer`` when serializing the
122+
``DateTime`` or ``DateTimeImmutable`` classes to avoid excessive memory
123+
usage and exposing internal details.
124+
119125
Here is an example on how to load the
120126
:class:`Symfony\\Component\\Serializer\\Normalizer\\GetSetMethodNormalizer`, a
121127
faster alternative to the `ObjectNormalizer` when data objects always use

0 commit comments

Comments
 (0)