2012-06-09 14 views
5

HYDRATE_OBJECT का उपयोग करते समय मैं डॉक्टर 2 प्रदर्शन के साथ संघर्ष कर रहा हूं। जब मैं HYDRATE_ARRAY से HYDRATE_OBJECT पर स्विच करता हूं, तो इसमें लगभग 10 गुना अधिक समय लगता है! मैं doctrine 2 and zend paginator संदर्भ के रूप में उपयोग किया है:सिद्धांत 2.2 + ज़ेंड फ्रेमवर्क पेजिनेशन स्पीड ऑप्टिमाइज़ेशन

$query = $em->createQuery($dql) 
    ->setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY) 
    ->setParameter('x', 1); 

// Pagination 
$paginator = new Doctrine\ORM\Tools\Pagination\Paginator($query, false); 
$iterator = $paginator->getIterator(); 
die(); // 160 ms 

बनाम

$query = $em->createQuery($dql) 
    ->setHydrationMode(\Doctrine\ORM\AbstractQuery::HYDRATE_OBJECT) 
    ->setParameter('x', 1); 

// Pagination 
$paginator = new Doctrine\ORM\Tools\Pagination\Paginator($query, false); 
$iterator = $paginator->getIterator(); 
die(); // 1.4s 

क्या मैं के लिए बाहर देखना चाहिए? प्रसंस्करण समय को कैसे कम करें और अभी भी HYDRATE_OBJECT का उपयोग करें? क्या अंकन को पूरा करने का कोई बेहतर तरीका है?

* संपादित: ->setFirstResult($itemsPerPage * $page - $itemPerPage)->setMaxResults($itemsPerPage); का उपयोग करना काफी लोडिंग समय कम हो, लेकिन जब $iterator का उपयोग कर:

$adapter = new \Zend_Paginator_Adapter_Iterator($iterator); 
$zend_paginator = new \Zend_Paginator($adapter);   
$zend_paginator->setItemCountPerPage($itemsPerPage) 
    ->setCurrentPageNumber($page); 

Zend केवल $itemsPerPage बारे में जानता है, (count($iterator) == $itemsPerPage) और इस तरह पृष्ठांकन लिंक हमेशा केवल 1 पेज की गणना। मैं Zend_Paginator का उपयोग करके उचित अंकन कैसे प्राप्त कर सकता हूं, और केवल $itemsPerPage इकाइयों को लोड कर सकता हूं?

+0

क्या आपने अपना कोड प्रोफाइल किया है? यह जानने के बिना इसका जवाब देना मुश्किल है कि आपके मॉडल में किस तरह का व्यवसाय तर्क है। –

+0

एरेक्कोलेक्शन के लिए -> add() को छोड़कर इकाइयों में कोई व्यावसायिक तर्क नहीं। बाकी सादे सेटर्स और गेटर्स हैं। –

+0

OneToMany का उपयोग करते समय सेटमैक्स समस्या को हल नहीं करता है? –

उत्तर

5

मैंने डॉक्टरेट पेजिनेशन के लिए ज़ेंड पेजिनेशन एडेप्टर रैपर बनाकर इसे हल किया;

<?php 
class PaginatorAdapter extends Doctrine\ORM\Tools\Pagination\Paginator implements 
     Zend_Paginator_Adapter_Interface 
{ 
    public function getItems($offset, $itemCountPerPage) 
    { 
     $this->getQuery()->setFirstResult($offset)->setMaxResults($itemCountPerPage); 
     return $this->getQuery()->getResult($this->getQuery()->getHydrationMode()); 
    } 
} 
+0

आपके द्वारा हल की गई वास्तविक समस्या क्या थी? –

+1

केवल धीमे धीमे निष्पादन, केवल $ आइटम लोड करके पेजिंग –

+0

नहीं, मेरा मतलब है कि विशेष रूप से 'Zend_Paginator' के आपके कस्टम कार्यान्वयन को' Zend_Paginate' –

संबंधित मुद्दे