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
इकाइयों को लोड कर सकता हूं?
क्या आपने अपना कोड प्रोफाइल किया है? यह जानने के बिना इसका जवाब देना मुश्किल है कि आपके मॉडल में किस तरह का व्यवसाय तर्क है। –
एरेक्कोलेक्शन के लिए -> add() को छोड़कर इकाइयों में कोई व्यावसायिक तर्क नहीं। बाकी सादे सेटर्स और गेटर्स हैं। –
OneToMany का उपयोग करते समय सेटमैक्स समस्या को हल नहीं करता है? –