jms序列化器性能问题

San*_*kas 23 php symfony jmsserializerbundle

我正在使用JMS Serializer.我发现当我使用大数据时性能非常糟糕.我将以下对象结构显示为数组:

$jsonData = array(
    'message' => 'this is a nice message', 
    'data' => array(
        0 => array(
          'firstname' => 'achim',
          'lastname' => 'menzel' 
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

这是我序列化数据的方式:

$serializer = $this->get('serializer');
$encodedJson = $serializer->serialize($jsonData, 'json');

$response = new Response($encodedJson);
$response->headers->set('Content-Type', 'application/json');
Run Code Online (Sandbox Code Playgroud)

数据可以是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';
}
Run Code Online (Sandbox Code Playgroud)

目前这个对象在里面$data:

class GuestDTO {

  private $userid;
  private $firstname;
  private $lastname;
  private $birthday;
  private $picturemedium;
  private $picturelarge;
  private $gender;
  private $modifydate;
  private $entries = array(); 
}
Run Code Online (Sandbox Code Playgroud)

并且$entries是此类中的对象列表:

class GuestlistentryDTO extends AbstractGuestDTO{

  private $guestlistentryid;
  private $guestlistid;
  private $arrivedat;
  private $bouncername;
  private $rejectionreason;
  private $companioncount;
  private $companioncountcheckin;    
  private $winner;
  private $vip;  
}
Run Code Online (Sandbox Code Playgroud)

没有任何注释,因为我准备了我的dto用于使用我需要的数据.

Ewa*_*ine 2

不幸的是这个库本身就相当慢。里面有很多递归。

不过,您可以做的几件事是使用 Redis 或 Memcache 查询缓存所有内容。您还可以巧妙地使用 SQL 查询,尝试减少多余的内容。只向序列化器提供您需要的重要数据,这样它就不会搜寻大量不会被使用的数据。