You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 2订单与客户网格加载缓慢,寻求禁用计数优化方案

Magento 2 禁用网格计数提升性能方案

针对你的店铺(80万客户、160万订单)因第三方扩展添加多余JOIN导致订单/客户网格计数查询过慢的问题,以下是几种有效禁用网格计数的方案:

方案一:通过插件拦截计数查询

Magento的网格计数由DataProvider类的getTotalCount方法触发,我们可以通过插件直接跳过耗时的计数查询,返回固定值或估算值。

订单网格插件示例

创建app/code/YourVendor/YourModule/Plugin/Sales/Ui/DataProvider/OrderDataProviderPlugin.php:

<?php
namespace YourVendor\YourModule\Plugin\Sales\Ui\DataProvider;

use Magento\Sales\Ui\Component\DataProvider\OrderDataProvider;

class OrderDataProviderPlugin
{
    public function aroundGetTotalCount(OrderDataProvider $subject, \Closure $proceed)
    {
        // 返回订单总数估算值,或返回0隐藏总数
        return 1600000;
        // return 0;
    }
}

客户网格插件示例

创建app/code/YourVendor/YourModule/Plugin/Customer/Ui/DataProvider/CustomerDataProviderPlugin.php:

<?php
namespace YourVendor\YourModule\Plugin\Customer\Ui\DataProvider;

use Magento\Customer\Ui\Component\DataProvider\CustomerDataProvider;

class CustomerDataProviderPlugin
{
    public function aroundGetTotalCount(CustomerDataProvider $subject, \Closure $proceed)
    {
        // 返回客户总数估算值
        return 800000;
        // return 0;
    }
}

注册插件

在app/code/YourVendor/YourModule/etc/di.xml中添加:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Sales\Ui\Component\DataProvider\OrderDataProvider">
        <plugin name="disable_order_grid_count" type="YourVendor\YourModule\Plugin\Sales\Ui\DataProvider\OrderDataProviderPlugin" sortOrder="10"/>
    </type>
    <type name="Magento\Customer\Ui\Component\DataProvider\CustomerDataProvider">
        <plugin name="disable_customer_grid_count" type="YourVendor\YourModule\Plugin\Customer\Ui\DataProvider\CustomerDataProviderPlugin" sortOrder="10"/>
    </type>
</config>

执行bin/magento setup:di:compile和bin/magento cache:flush使插件生效。

方案二:修改UI组件配置隐藏总数显示

如果不需要彻底禁用计数查询,只是想隐藏前端的总数展示,可以修改网格的UI配置文件:

订单网格配置

编辑app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml(或在主题/自定义模块中重写),找到paging组件添加showTotal="false":

<listingToolbar name="listing_top">
    <paging name="listing_paging" showTotal="false">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="storageConfig" xsi:type="array">
                    <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks</item>
                    <item name="namespace" xsi:type="string">current.paging</item>
                </item>
            </item>
        </argument>
    </paging>
</listingToolbar>

客户网格配置

编辑app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml,同样修改paging组件:

<listingToolbar name="listing_top">
    <paging name="listing_paging" showTotal="false">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="storageConfig" xsi:type="array">
                    <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                    <item name="namespace" xsi:type="string">current.paging</item>
                </item>
            </item>
        </argument>
    </paging>
</listingToolbar>

执行bin/magento cache:flush后,前端网格将不再显示总数,部分版本会直接跳过计数查询。

方案三:禁用不必要的第三方扩展

从慢查询可以看到,订单网格的ae_ec、amasty_mostviewed_pack_sales_history,客户网格的amasty_rewards_rewards是多余JOIN的来源。如果这些扩展功能非必需,直接禁用即可从根源解决问题:

# 根据实际扩展名调整
bin/magento module:disable Ae_Ec Amasty_MostviewedPack Amasty_Rewards
bin/magento setup:upgrade
bin/magento cache:flush

内容的提问来源于stack exchange,提问作者Anton-GrNL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:13:14