为什么你好Magento大师,
我正在Magento中导入大型产品目录,因此每个人都会感到很沮丧。
导入已经完成,但我现在正在寻找可以改进的部分,并找到一个有趣的(至少对我而言)时刻 - > http://screencast.com/t/Gq8VumQluKr
这适用于5K SKU's
,正如您所看到的,存在很大差异。
在第二个集合中,我使用getData()
,然后从数组中获取entity_id
。
但是在第一次收集中,我没有使用getData()
并从model
函数中获取了ID。
我知道getId()
最有可能是调用函数,但即使我调用了一些getLala()
或getData('lala')
,在集合上使用getData()
然后循环将是数百(甚至数千倍)。
我的问题是 - 为什么性能有这些差异以及这些方法有何不同?
感谢。
答案 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'之间存在细微差别,但我不确定。