Doctrine 2.2 + Zend Framework 分页速度优化

2023-12-28

我在使用时遇到了 Doctrine 2 性能问题HYDRATE_OBJECT。当我从HYDRATE_ARRAY to HYDRATE_OBJECT,需要花费近10倍的时间!我用过学说 2 和 zend paginator https://stackoverflow.com/questions/6635194/doctrine-2-and-zend-paginator/9334016#9334016作为参考:

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

*Edit: Using ->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实体?


我现在通过为 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());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doctrine 2.2 + Zend Framework 分页速度优化 的相关文章

  • PDO 库比本机 MySQL 函数更快吗?

    我已经阅读了几个与此相关的问题 但我担心它们可能已经过时 因为自这些问题得到解答以来 更新版本的 PDO 库已经发布 我编写了一个 MySQL 类 它构建查询并转义参数 然后根据查询返回结果 目前这个类正在使用内置的mysql函数 我很清楚
  • 在 PHP 中验证约 400MB 的大型 XML 文件

    我有一个很大的 XML 文件 大约 400MB 在开始处理之前我需要确保它的格式正确 我尝试的第一件事是类似于下面的内容 这很棒 因为我可以找出 XML 是否格式不正确以及 XML 的哪些部分 不好 doc simplexml load s
  • 同一页面中多个表单上的 Google 隐形 ReCaptcha - PHP

    我正在我的 php 网站上关注这个 Invisible ReCaptcha 文档 http www pinnacleinternet com installing invisible recaptcha http www pinnaclei
  • PHP 中的 SQL 语句与 phpmyadmin 中的 SQL 语句的行为不同

    I have form store sql INSERT INTO myodyssey myaccount id email username password VALUES NULL email unixmiah formtest woo
  • 双端队列与队列速度

    我正在研究 LeetCode 上的一个问题 Here https leetcode com problems moving average from data stream 当我完成这个问题后 我想出了 class MovingAverag
  • C# 的快速线程安全随机数生成器

    我需要在多个正在运行的线程中快速生成随机浮点数 我尝试过使用System Random 但它对于我的需求来说太慢了 并且它在多个线程中返回相同的数字 当我在单线程中运行应用程序时 它工作正常 此外 我需要确保生成的数字在 0 到 100 之
  • 如何限制 JSON 访问?

    我有一个 Web 应用程序 可以从新创建的 JSON API 中提取数据 我的静态 HTML 页面通过 JavaScript 从静态 HTML 页面动态调用 JSON API 如何限制对 JSON API 的访问 以便只有我 我的网站 可以
  • 用 C 更快地读取文件

    嗯 我想知道是否有一种比使用 fscanf 更快地读取文件的方法 例如假设我有这个文本 4 55 k 52 o 24 l 523 i 首先 我想读取第一个数字 它给出了接下来的行数 令这个数称为N N 之后 我想读取 N 行 其中有一个整数
  • 在 while 循环之外使用变量(作用域)

    关于 PHP 范围的小问题 我似乎无法在 while 循环之外调用变量 report 我尝试过各种事情 包括return 这不起作用 这里唯一起作用的两个函数是如果我echo变量 report在循环内 或者如果我print它 我不想这样做
  • fsockopen() 和 SSL 出错,“无法启用加密”

    我正在尝试连接到 Nominet EPP 测试台 但收到 无法启用加密 的消息 这似乎是一个罕见的错误 没有记录的解决方案或原因 用行 socket fsockopen ssl testbed epp nominet org uk 700
  • 一个表单包含两个提交按钮,每个按钮都有不同的操作

    我花了几个小时试图找到问题的解决方案 但似乎找不到正确的解决方案 提前感谢你的帮助 我有一个 html 表单
  • PHP 中的多行字符串文字

    考虑 xml l xml vv echo xml 这将回响vv 为什么以及如何为诸如此类的事情执行多行字符串文字简单XML https en wikipedia org wiki SimpleXML etc Well xml l vv Wo
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • 为什么 strtotime('a') 返回时间?

    我正在 PHP 5 3 中循环遍历 CSV 文件并检查日期 我一直在使用 strtotime 它运行良好 除了我有一个包含 1 或 2 个字符代码的字段 任何单个字符代码上的 strtotime 似乎都像我要求 now 一样 但如果代码是
  • 包含当月所有日期的 PHP 数组 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试并且仍然想知道如何获得一个
  • Laravel 更新雄辩事件:获取数据

    我一直在读有关雄辩事件的文章 与模型的每次交互都有一个事件 创建 创建 更新 更新 保存 保存 删除 删除 恢复 恢复 我想知道模型更新后的数据以及之前的数据 是否可以 因为文档没有太多关于如何使用这些事件的信息 您正在寻找getDirty
  • 无法下载 Windows 版 Composer SSL:握手超时

    这是我尝试安装 Windows 版 Composer 时得到的结果 The https getcomposer org versions https getcomposer org versions 无法下载文件 SSL 握手超时 无法启用
  • TCPDF - 来自 mysql 的打印表显示重复的第一行

    我是 TCPDF 的新手 我面临的小问题是所有输出数据都显示同一行 我的意思是第一条记录重复数据库中存在的总数据 行 的次数 这是我的代码 tbl header
  • 未找到教义列:1054“字段列表”中未知列“s.features”

    我在站点表中添加了一个新列 features 并使用 Doctrine 重新生成了模型 此代码导致错误 siteTable Doctrine Core getTable Site site siteTable gt findOneByNam

随机推荐

  • Android 上的 Google Drive 错误:java.lang.IllegalArgumentException:名称不能为空:null

    我在 Google Drive Android 应用程序上遇到了 java lang IllegalArgumentException 名称不能为空 null 异常 我已经谷歌搜索好几天了 没有任何线索 这是我的代码 一个简单的例子 用于获
  • standard_init_linux.go:211: exec 用户进程导致“exec 格式错误”

    我正在为 python 脚本构建 Dockerfile 它将在 minikube windows 10 系统中运行 下面是我的 Dockerfile 使用以下命令构建 dockerdocker build t python hellowor
  • 如何访问 Ruby 模块方法

    我有一个用于常量的 Ruby 模块 它有一个变量列表和一种应用格式化的方法 我似乎无法访问该模块中的方法 知道为什么吗 If you include该模块的方法成为实例方法但如果你extend该模块然后它变成类方法 module Const
  • 在几秒钟而不是几小时内旋转数百个 JPEG

    我们的计算机一次获取数百张图像 我们需要尽快旋转它们并调整它们的大小 旋转可旋转 90 度 180 度或 270 度 目前我们使用的是命令行工具图形魔术师 http www graphicsmagick org 旋转图像 旋转图像 5760
  • WooCommerce 在成功结账时对每个产品执行 PHP

    仅当在 WooCommerce 中成功结帐时 我才需要为购买的每个产品 基于 ID 执行一些 PHP 有谁知道这是否可能 如果可以的话 你能给我指出正确的方向吗 Thanks 你可以运行一个函数woocommerce payment com
  • WinDbg !heap 命令由于缺少符号而无法工作

    我正在尝试使用 WinDbg 调试带有 C 非托管内存分配的 NET 应用程序 当我尝试运行 heap命令 我收到以下错误消息 0 022 gt heap ERROR Symbol file could not be found Defau
  • Graphviz:更改子图簇内的节点间距

    经验丰富但不是 Graphviz 专家 我分享的示例代码和图像是更大图表的一部分 我将其拉出来以使问题和示例更清晰 该图是按等级分开的并且从左到右流动 在图像示例中 您可以看到三个等级和节点空间很好 但我想在子图中收紧它们 我已经尝试了六种
  • 如何实现对2个不同表数据的搜索?

    使用 mysql 和 PHP 我已经在使用 MATCH AGAINST 子句了 它在单独的表上运行良好 就像我想在商店表中搜索一样 没问题 我想要的是能够在单个结果页面中搜索和显示不同表的结果 例如 如果我输入 巧克力衣服 我可能会得到4个
  • 在 C++ 或 Qt 中格式化 XML 文件

    我有一个 XML 文件 其中输出未格式化 这意味着所有输出都在一行中 但我想逐个标签地打破它 例如
  • all.moments 功能奇怪的结果

    我想计算分布的 n 阶矩 我正在尝试使用 R 中库 moments 的 all moments 函数 我已经以这种方式测试了 all moments library moments r lt rnorm 10000 rr lt all mo
  • 移动网络应用程序可以在后台运行吗? (iOS 和安卓)

    移动网络应用程序可以在后台运行吗 我主要对 iOS 和 Android 感兴趣 Thanks 由于这种情况几乎每天都在变化 因此我将发布更新的答案 这适用于这些浏览器的最新版本 但明天可能会发生变化 My 音乐应用程序 http thedi
  • .NET 中是否有多核排序实现?

    NET 中是否有多核排序实现 这是我不久前使用的多线程快速排序async await 在一定的排序大小下 它 恢复 回称为双端选择排序的基本排序 public static class SortExtensions
  • 一起使用@Spy和@Autowired

    我有一个带有 3 个方法的服务类 服务类还使用一些 Autowired 注释 在 3 种方法中 我想模拟两种方法 但对第三种方法使用真实方法 问题是 如果我将 Autowired 与 Spy 一起使用 则将调用所有三个实际方法实现 如果我仅
  • IIS应用程序池PID

    有谁熟悉获取与进程 ID 关联的应用程序池的方法吗 我正在使用 Win32 Process 查询 W3WP 服务并返回 PID 现在我正在尝试获取与其关联的应用程序池 在 Windows Server 2008 上 情况发生了变化 in s
  • 设置按钮助记键事件,无需使用 ALT

    Is there a way to set a button key event in Java so that Alt does not have to be pressed For example when this is used s
  • 如何在不使用 Visual Studio 的情况下编辑 RDLC 报告

    我现在正在研究Sql Server Management Studio和 Visual Studio C 我创建了一个Stored Procedure从数据库中的表中检索数据 使用结果dataset 我创建了一个rdlc使用 Visual
  • python中的复杂if语句

    我需要实现一个complexPython 中的 if elif else 语句 但我无法让它工作 我需要的 elif 行必须检查变量是否满足此条件 80 443 或 1024 65535 含 I tried if several check
  • 可观察以及如何控制结果速度

    我正在寻找一个运算符来帮助我调整可观察值发出的结果 它看起来像这样 A BC D E A B C D E 我尝试了 AuditTime 但它不会重播间隔之间发出的结果 它会执行以下操作 A BC D E A C E 感谢您的帮助 我认为这应
  • 带有输入元素的 AngularJS 自定义指令,从外部传递验证器

    我正在使用一个简单的自定义指令来修改整个应用程序中出现的输入字段 app directive editor function return restrict E templateUrl editor html scope value The
  • Doctrine 2.2 + Zend Framework 分页速度优化

    我在使用时遇到了 Doctrine 2 性能问题HYDRATE OBJECT 当我从HYDRATE ARRAY to HYDRATE OBJECT 需要花费近10倍的时间 我用过学说 2 和 zend paginator https sta