Jon*_*eig 5 php performance doctrine-orm
我正在努力使用Doctrine 2表演HYDRATE_OBJECT
.当我切换HYDRATE_ARRAY
到HYDRATE_OBJECT
,它需要将近10倍!我使用了doctrine 2和zend paginator作为参考:
$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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我应该注意什么?如何减少处理时间仍然使用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);
Run Code Online (Sandbox Code Playgroud)
Zend只知道$itemsPerPage
,(count($iterator) == $itemsPerPage
)因此分页链接总是只计算1页.如何使用Zend_Paginator完成正确的分页,并且只加载$itemsPerPage
实体?
我现在通过为Doctrine分页创建Zend分页适配器包装器来解决这个问题.
<?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());
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2704 次 |
最近记录: |