我正在使用 JMS 序列化程序。而且我发现当我使用大数据时性能真的很差。我将以下对象结构显示为数组:
$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,以便根据需要使用数据。
最佳答案
不幸的是,这个库本身就很慢。里面有很多递归。
然而,您可以做的几件事是使用 Redis 或 Memcache 查询缓存所有内容。您还可以巧妙地处理 SQL 查询,尝试减少脂肪。只为序列化程序提供您需要的重要数据,这样它就不会拖网遍历大量无论如何都不会被使用的数据。
关于php - jms 序列化器性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16733436/