Joomla getItems 默认分页

Posted

技术标签:

【中文标题】Joomla getItems 默认分页【英文标题】:Joomla getItems default Pagination 【发布时间】:2013-07-03 12:53:58 【问题描述】:

谁能告诉我模型中的getItems() 函数是否在执行查询之前自动添加全局设置的LIMIT(来自getListQuery())。 Joomla 真的很挣扎,似乎试图缓存整个结果(这里有超过 100 万条记录!)。

在查看 /libraries/legacy/model/list.php/libraries/legacy/model/legacy.php 之后,getItems() 似乎确实添加了 LIMIT在将结果发送到缓存之前使用$this->getState('list.limit') setQuery 但如果是这种情况 - 为什么 Joomla 如此挣扎。

那么发生了什么?为什么phpMyAdmin可以在一秒钟内返回有限的结果而Joomla只是超时?

非常感谢!

【问题讨论】:

【参考方案1】:

如果您有 100 万条记录,您肯定会按照 Riccardo 的建议,覆盖和优化模型。

JModelList 运行查询两次,一次用于分页编号,然后用于显示查询本身。您需要小心地从 JModellist 继承以避免分页查询。

另外,articles query 因其连接而臭名昭著。您肯定会失去一些减速(例如,怀疑您正在使用联系人链接)。

如果所有文章都对公众可见,您可以remove the ACL check - 这相当昂贵。

也没有来自西方或东方的 DBA 能够解释为什么需要所有这些 GROUP BY's。

失去这些东西会有很大帮助。事实上,从头开始构建查询可能是最好的。

【讨论】:

嗨,谢谢 - 我刚刚放弃了 JPagination,它的加载速度要快得多!问题是 - 我想保留 JPagination 但更改 getTotal 函数,以便不是从完整查询中计算行数,而是让数据库执行“选择计数”。谁能推荐如何在不破解核心 Joomla 代码的情况下做到这一点?【参考方案2】:

它会自动添加分页。

它的挣扎很可能是由于一个大数据集(即集合中返回的 1000 多个项目)和许多查找字段:例如内容模块连接多达 10 个表,以获取作者姓名等。

这可能是一个真正的杀手,我在专用服务器上运行了超过一秒钟的查询,并且只有 3000 个内容项。我们发现的一个标签云组件可能需要长达 45 秒才能返回关键字列表。如果是这种情况(很多记录和很多join),你唯一的出路就是进一步限制options中的filters,看看能不能得到一些更快的结果(比如限制最近3个月的文章可以大大减少所需的时间)。

但是,如果这还不够或不可行,您将不得不在新模型中编写新的优化查询,这最终将带来任何其他优化的最佳性能优化。在编写查询时,请考虑利用数据库特定的优化,即添加索引、全文索引,并且仅在确实需要时才使用连接。

还要考虑连接决不能随着字段、翻译或其他的数量而增长。 常量查询很容易被数据库引擎优化和缓存,而动态查询永远不会那么高效。

【讨论】:

以上是关于Joomla getItems 默认分页的主要内容,如果未能解决你的问题,请参考以下文章

Joomla K2 通过将页码添加到分页来更改分页标题

Android坑收集

Joomla 3以编程方式为组件设置默认模板

Joomla 组件输出 - 仅模板 - 无默认站点骨架

Joomla 在 Mac OS X Snow Leopard 上使用默认 Apache

CSS joomla默认的css类