Commit 5016771
committed
minor #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 object1 file changed
+6
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
119 | 125 | | |
120 | 126 | | |
121 | 127 | | |
| |||
0 commit comments