2013-05-24 26 views
22

JMS Serializer kullanıyorum. Ve büyük veri kullandığımda performansın gerçekten kötü olduğunu öğrendim.jms serializer performans sorunu

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

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

Veri 1n kadar nesnelerin bir listesi olabilir:

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

Bu benim verilerini seri nasıl: Ben bir dizi olarak görüntülenen aşağıdaki nesne yapısını ettik. Verilerdeki 500'den fazla nesneye sahip olduğumda, performans çok yavaş (5 saniyeden fazla). Doğrudan json_encode()'u kullandığımda, 1 saniyeden fazla değil.

JMS Serializer'ın kullanımını nasıl geliştirebilirim? Jms serializer'ın büyük veriyi işleyeceğini sanmıyorum.

Bu seri için kullanılacak olan ana sınıf:

class JsonData { 

    public $success = false; 
    public $message = ''; 
    public $data; 
    public $responseCode = 200; 
    public $contentType = 'application/json'; 
} 

ve şu anda bu amaç, içinde $data olup:

class GuestDTO { 

    private $userid; 
    private $firstname; 
    private $lastname; 
    private $birthday; 
    private $picturemedium; 
    private $picturelarge; 
    private $gender; 
    private $modifydate; 
    private $entries = array(); 
} 

ve $entries bu sınıftan nesnelerin bir listesi:

herhangi annotati olmadan
class GuestlistentryDTO extends AbstractGuestDTO{ 

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

çünkü dto'ları ihtiyacım olan verileri kullanması için hazırladım.

+2

Eğer JMSSerializer parçaları xhprof veya Xdebug ve cachegrind/KCacheGrind/webgrind ile her şeyi yavaşlatan hangi teftiş denediniz başvurulan koleksiyonları için grupları ve içerme/dışlama kuralları ince ayarlı karışımı geldi? JMS serileştirici - filtreleme değerleri veya sanal alanlar gibi serileştirme işleminize özel olarak özel bir antivirüsünüz var mı? – nifr

+0

Sadece jms serializer'ın isteği yavaşlatan kısım olduğunu öğrendim. Herhangi bir ayar veya ek açıklama ayarlamıyorum çünkü ihtiyaç duyduğum doğru özniteliklere sahip DTO Nesneleri kullanıyorum, bu yüzden herhangi bir ayar ayarlamanıza gerek yok. –

+0

, kuruluşunuzu hızlı bir şekilde sağlayabilir, böylece buradaki performans etkisi hakkında geri bildirim verebilir miyim? – nifr

cevap

2

Bu kütüphane doğal olarak oldukça yavaştır. Orada çok fazla yineleme var.

sen ancak yapabileceği şeylerin bir çift REDIS veya memcache kullanarak sorgu önbellek her şeydir. Ayrıca, SQL sorgularınız ile akıllı olabilir, yağları kırpmaya çalışın. Sadece seri hale getiriciye ihtiyacınız olan önemli verileri verin, böylece zaten kullanılmayacak çok fazla veriyi trol oynatmayın.

1

Kısmi yanıtlar kullanıyor musunuz? senin sorunun aslında oldukça açık görünüyor. Bence müşteri öğelerin sınırlı sayıda sormalısınız ve ... gerektiğinde daha

1

sormak ben de aynı sorunu isabet ettik ve "en iyi çözüm" oluşturulan json için bir önbellek oluşturmak için olmuştur Redis'te çıktı ve belirli varlıklarda önbelleği temizlemek için CRUD Doktrini olaylarını takın.

Bazı yardım