gpt4 book ai didi

mysql - Magento - 为什么在 ListView 中使用带有直接 SQL 的自定义 block 比在 list.phtml 中使用直接 SQL 慢?

转载 作者:行者123 更新时间:2023-11-29 13:23:36 25 4
gpt4 key购买 nike

在 Magento 中,我们遇到了来自不同供应商的产品库存水平和交货时间变化极快的问题。我们的目录中有超过 40 万种产品,每天的库存水平大约有 50-15 万种变化,热门产品每小时都会变化 - Magento 无法及时跟上这一变化。

我们在产品列表 (list.phtml)、 View (view.phtml) 和购物车中使用直接 sql 解决了大部分问题。这个极其简单的查询将访问(如果需要)我们数据库中的表,该表保存每种产品的库存水平、产品状态和交货时间,并将其显示在产品旁边,以确保我们向客户显示准确的库存和交货时间信息。

查询:

$query = "SELECT external_stock, productstatus, deliveryperiod FROM products_supplierstatus WHERE sku='$sku'";

$data = Mage::getSingleton('core/resource')->getConnection('core_read')->fetchAll($query);

使用 php,我们循环遍历状态和库存水平,并根据一些因素显示一个 tekst,告知客户该产品的预计交货时间。

到目前为止,一切顺利 - 总是像魅力一样工作并解决了我们的问题。

但是,我们决定将这些例程组合在一个简单的模块中,这样我们就可以始终调用同一个 block ,并且我们能够更轻松地管理交货时间的更改(在 1 个位置而不是 3 个位置)。

听起来很简单,所以我们创建了一个小模块并在列表和 View 页面中调用它:

<?php echo $this->getLayout()->createBlock('dynamic/delivery')->setData('prodid', $_product->getId())->setTemplate('dvdo/showdelivery.phtml')->toHtml(); ?> 

也很好用..但是:主要在 ListView 上值得注意的是页面的加载时间比以前长得多。

我们几乎没有改变查询或循环结果并创建 html 的 php 中的任何内容。因为我们需要近乎实时的股票信息,所以我们不缓存这些 block 。

这背后的原因是什么?与在 phtml 文件中执行几乎相同的代码相比,在 Magento 中构建此 block 是否需要那么多额外的资源?

如果有人能给我指明正确的方向以使该模块正常工作,我将非常感激!

最佳答案

因素太多,任何人都无法猜测出正确的答案。您需要自己对其进行分析和调试。这里有一些指导。

  1. 可能不是你想的那样。 Magento 是一个庞大的应用程序,具有许多相互交互的抽象层,并且具有如此多不同的交互,因此通常很难保持正常状态。您可能更改了其他影响性能的内容。这就是为什么您需要调试和分析

  2. Varien_Profiler 简介,Magento 附带的分析类

  3. 如果您完全删除 dvdo/showdelivery.phtml 的内容,使其成为空白文件,性能问题还会发生吗?

  4. 它的渲染次数是否比您想象的要多?该 block 是否在循环内? (在我们的模板中进行一些登录可以帮助揭示这一点)

  5. 您的模板文件中到底有什么?您的 SQL 查询使用 SKU,但您的 block (大概)使用产品 ID

  6. 说到产品 ID,$_product->getId() 中的 $_product 是从哪里来的?

  7. 动态/交付的 block 类是什么样的? PHP构造函数中有繁重的操作吗? Magento 的 _construct 方法? prepareLayout 方法?

  8. 虽然我对此表示怀疑,但实例化附加类(您的 block )和加载另一个模板文件(phtml)的额外工作可能会影响您的特定系统一次打开太多 PHP 类或文件的一些 *nix* 阈值。如果您的 block 实例化处于循环中,则更有可能出现这种情况。

  9. 如果您的原始 SQL 是数据库系统(MySQL?)可以轻松应用 SQL 缓存的内容,但 dvdo/showdelivery.phtml 中的任何查询都不是这样它可以轻松地在 SQL 级别缓存一些东西。

如果您弄清楚了,请务必更新评论 - 我很想听听它最终是什么。祝你好运!

关于mysql - Magento - 为什么在 ListView 中使用带有直接 SQL 的自定义 block 比在 list.phtml 中使用直接 SQL 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442918/

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