23

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 シリアライザーの使用を改善するにはどうすればよいですか? 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(); 
}

And$entriesは、このクラスのオブジェクトのリストです。

class GuestlistentryDTO extends AbstractGuestDTO{

  private $guestlistentryid;
  private $guestlistid;
  private $arrivedat;
  private $bouncername;
  private $rejectionreason;
  private $companioncount;
  private $companioncountcheckin;    
  private $winner;
  private $vip;  
}

必要に応じてデータを使用するために dto を準備したため、注釈はありません。

4

3 に答える 3

1

私も同じ問題に遭遇しましたが、「最善の回避策」は、Redis で生成された json 出力のキャッシュを作成し、特定のエンティティに CRUD Doctrine イベントをプラグインしてキャッシュをフラッシュすることでした。

微調整されたグループの組み合わせと、参照されたコレクションの包含/除外ルールからいくつかの助けが得られました

于 2015-04-19T17:32:10.343 に答える