php - jms 序列化器性能问题

标签 php symfony jmsserializerbundle

我正在使用 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');

数据可以是 1n 对象的列表。当我的数据中有超过 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/

相关文章:

php - 自定义 Composer 自动加载器

php - 以编程方式即时为多语言/多域站点创建 sitemap.xml

php - 在外键名称中添加 _id"后缀的好处

php - 如何在 Twig 插值中嵌入双引号?

symfony - 如何访问服务容器以便使用 JMSSerializer?

api - Symfony 4 内部服务器错误 : Context visitingStack not working well

php - 从 PHP 执行 Python 脚本

php - 检查 DoctrineBehaviors 中的字段是否存在翻译

symfony - 从实体类访问 generateURL()

php - 使用 JMS Serializer 时禁用 Doctrine 2 延迟加载?