教义2.2 + Zend框架分页速度优化 [英] Doctrine 2.2 + Zend Framework pagination speed optimization
问题描述
当我使用 HYDRATE_OBJECT
时,我正在努力使用Doctrine 2表演。当我从 HYDRATE_ARRAY
切换到 HYDRATE_OBJECT
时,需要近10倍的时间!我已经使用原则2和zend paginator 作为参考: ($ d $)
- > setHydrationMode(\Doctrine\ORM($ d $)
I'm struggling with Doctrine 2 performce when using HYDRATE_OBJECT
. When I switch from HYDRATE_ARRAY
to HYDRATE_OBJECT
, it takes nearly 10 times longer! I've used doctrine 2 and zend paginator as reference:
$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
vs
$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
?有没有更好的方式来完成分页?
What should I watch out for? How to reduce the processing time and still utilize HYDRATE_OBJECT
? Is there a better way to accomplish pagination?
*编辑:使用 - > setFirstResult($ itemsPerPage * $页面 - $ itemPerPage) - > setMaxResults($ itemsPerPage);
显着减少加载时间,但使用 $ iterator
时:
*Edit: Using ->setFirstResult($itemsPerPage * $page - $itemPerPage)->setMaxResults($itemsPerPage);
significantly decrease loading time, but when using $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
实体?
Zend only knows about $itemsPerPage
, (count($iterator) == $itemsPerPage
) and thus the pagination links always calculate 1 page only. How can I accomplish a proper pagination using Zend_Paginator, and only load $itemsPerPage
entities?
推荐答案
我现在通过为Doctrine分页创建一个Zend分页适配器包装来解决这个问题;
I solved this now by creating a Zend pagination adapter wrapper for Doctrine pagination;
<?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());
}
}
这篇关于教义2.2 + Zend框架分页速度优化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!