Я использую JMS Serializer. И я узнал, что производительность очень плохая, когда я использую большие данные. Я следующая структура объекта отображается в виде массива:jms serializer проблема с производительностью
$jsonData = array(
'message' => 'this is a nice message',
'data' => array(
0 => array(
'firstname' => 'achim',
'lastname' => 'menzel'
)
)
);
Это, как я сериализовать данные:
$serializer = $this->get('serializer');
$encodedJson = $serializer->serialize($jsonData, 'json');
$response = new Response($encodedJson);
$response->headers->set('Content-Type', 'application/json');
Данные может быть списком 1
до n
объектов. Когда у меня более 500 объектов в данных, производительность очень медленная (более 5 секунд). Когда я использую json_encode()
напрямую, это заняло не более 1 секунды.
Как я могу улучшить использование JMS Serializer? Я не думаю, что сериализатор jms не может обрабатывать большие данные.
Это основной класс, который будет использоваться для сериализации:
class JsonData {
public $success = false;
public $message = '';
public $data;
public $responseCode = 200;
public $contentType = 'application/json';
}
И в настоящее время этот объект находится внутри $data
:
class GuestDTO {
private $userid;
private $firstname;
private $lastname;
private $birthday;
private $picturemedium;
private $picturelarge;
private $gender;
private $modifydate;
private $entries = array();
}
И $entries
список объектов из этого класса:
class GuestlistentryDTO extends AbstractGuestDTO{
private $guestlistentryid;
private $guestlistid;
private $arrivedat;
private $bouncername;
private $rejectionreason;
private $companioncount;
private $companioncountcheckin;
private $winner;
private $vip;
}
Без каких-либо комментариев потому что я подготовил мое dto для использования данных по мере необходимости.
Вы пробовали проверки, какие части JMSSerializer замедляются все это с xhprof или Xdebug и похожем на Cachegrind/KCachegrind/webgrind? У вас есть что-то особенное, включенное в вашу сериализацию с помощью JMS-сериализатора - например, значения фильтрации или виртуальные поля? – nifr
Я только узнал, что сериализатор jms - это часть, которая замедляет запрос. Я не устанавливаю никаких настроек или аннотаций, потому что я использую объекты DTO, у которых есть правильные атрибуты, что мне нужно, поэтому мне не нужно устанавливать какие-либо настройки. –
можете ли вы быстро предоставить свою сущность, чтобы я мог дать отзыв о влиянии на производительность здесь? – nifr