Używam Serializera JMS. I dowiedziałem się, że wydajność jest naprawdę zła, gdy używam dużych danych. Mam następującą strukturę obiektu wyświetlanego jako tablica:jms serializer Wydajność wydania
$jsonData = array(
'message' => 'this is a nice message',
'data' => array(
0 => array(
'firstname' => 'achim',
'lastname' => 'menzel'
)
)
);
to jak ja serializacji danych:
$serializer = $this->get('serializer');
$encodedJson = $serializer->serialize($jsonData, 'json');
$response = new Response($encodedJson);
$response->headers->set('Content-Type', 'application/json');
dane mogą być lista 1
till n
obiektów. Kiedy mam więcej niż 500 obiektów w danych, wydajność jest bardzo powolna (ponad 5sek.). Kiedy używam bezpośrednio json_encode()
, to nie jest to więcej niż 1 sekunda.
Jak mogę poprawić wykorzystanie JMS Serializer? Nie sądzę, że serializator jms nie poradzi sobie z dużymi danymi.
Jest to główne klasy, które będą wykorzystywane do szeregowania:
class JsonData {
public $success = false;
public $message = '';
public $data;
public $responseCode = 200;
public $contentType = 'application/json';
}
a obecnie obiekt ten znajduje się wewnątrz $data
:
class GuestDTO {
private $userid;
private $firstname;
private $lastname;
private $birthday;
private $picturemedium;
private $picturelarge;
private $gender;
private $modifydate;
private $entries = array();
}
I $entries
jest lista obiektów z tej klasy:
class GuestlistentryDTO extends AbstractGuestDTO{
private $guestlistentryid;
private $guestlistid;
private $arrivedat;
private $bouncername;
private $rejectionreason;
private $companioncount;
private $companioncountcheckin;
private $winner;
private $vip;
}
Bez żadnych annotati ons, ponieważ przygotowałem moje dto do korzystania z danych, jak potrzebuję.
Czy próbowałeś kontroli, które części JMSSerializer spowalnia całą sprawę z xhprof lub XDebug i cachegrind/kcachegrind/webgrind? Czy masz włączoną funkcję serializacji z serializatorem JMS - podobnie jak wartości filtrowania lub pola wirtualne? – nifr
Dowiedziałem się tylko, że serializator jms jest częścią, która spowalnia żądanie. Nie ustawiam żadnych ustawień ani adnotacji, ponieważ używam obiektów DTO, które mają odpowiednie atrybuty, czego potrzebuję, więc nie muszę ustawiać żadnych ustawień. –
możesz szybko podać swój podmiot, aby móc przekazać opinię na temat wpływu na wydajność tutaj? – nifr