gpt4 book ai didi

php - Doctrine 2.2 + Zend Framework 分页速度优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:36:16 25 4
gpt4 key购买 nike

我在使用 HYDRATE_OBJECT 时遇到了 Doctrine 2 性能问题。当我从 HYDRATE_ARRAY 切换到 HYDRATE_OBJECT 时,它花费了将近 10 倍的时间!我用过 doctrine 2 and 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

对比

$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?有没有更好的方法来实现分页?

*Edit:使用 ->setFirstResult($itemsPerPage * $page - $itemPerPage)->setMaxResults($itemsPerPage); 显着减少加载时间,但是当使用$迭代器:

$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 实体?

最佳答案

我现在通过为 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());
}
}

关于php - Doctrine 2.2 + Zend Framework 分页速度优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10962802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com