Magento产品系列过滤

时间:2014-07-28 07:41:02

标签: php magento collections foreach product

为什么你好Magento大师,

我正在Magento中导入大型产品目录,因此每个人都会感到很沮丧。

导入已经完成,但我现在正在寻找可以改进的部分,并找到一个有趣的(至少对我而言)时刻 - > http://screencast.com/t/Gq8VumQluKr

这适用于5K SKU's,正如您所看到的,存在很大差异。

在第二个集合中,我使用getData(),然后从数组中获取entity_id

但是在第一次收集中,我没有使用getData()并从model函数中获取了ID。

我知道getId()最有可能是调用函数,但即使我调用了一些getLala()getData('lala'),在集合上使用getData()然后循环将是数百(甚至数千倍)。

我的问题是 - 为什么性能有这些差异以及这些方法有何不同?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为您的基准测试代码不正确。你在getData()函数调用之后开始基准测试,但getData()正在做所有繁重的工作。你应该在getData()函数调用之前开始花时间。我将更详细地解释它:

当您在没有getData的for循环中使用产品集合时,Magento将在内部使用ArrayIterator来迭代产品列表。要获得该列表,Magento将在内部调用getData函数(检查lib / Varien / Data / Collection / DB.php中的load()函数),如果尚未调用它。

Magento仅在您提出要求时才会延迟加载产品列表。如果在集合上调用getData()函数,则请求产品列表并在那时收集它,或者如果使用for循环,则它将在循环之前请求产品列表。

getId()和$ product ['entity_id']没有多大区别,在内部它几乎完全相同。 Product是实现ArrayAccess的Varien对象,因此您可以调用$ product ['id']以及getId(),它们都在内部调用getData('id')函数。我相信'id'和'entity_id'之间存在细微差别,但我不确定。