教义2.2 + Zend框架分页速度优化 [英] Doctrine 2.2 + Zend Framework pagination speed optimization

查看:170
本文介绍了教义2.2 + Zend框架分页速度优化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用 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 $itemsPerPageentities?

推荐答案

我现在通过为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆