1

我想知道为什么每个产品的更新都需要 10 秒!即使没有更新任何内容,只需按“保存”按钮即可。

我发现product_save_after上有一个观察者名字是:applyAllRulesOnProduct

因此,即使您不更改价格,它也会将您的所有促销活动应用到该产品上!不仅如此,它还更新了所有的报价!后者大约需要 2 秒,每次更新完成 4 次!这是查询:

UPDATE `sales_flat_quote` AS `t1`
 INNER JOIN (SELECT `t2`.`quote_id` AS `entity_id` FROM `sales_flat_quote_item`     AS `t2`
INNER JOIN `catalogrule_product_price` AS `t3`
 WHERE (t2.product_id = t3.product_id) GROUP BY `quote_id`) AS `t2` ON t1.entity_id     =     t2.entity_id
SET `t1`.`trigger_recollect` = 1"

我想知道为什么它会这样做,更新所有报价而不更新价格?我称之为错误。Magento 应该检查哪个字段已更新...

顺便说一句,即使我配置了自动清理日志,magento 也不会清空 sales_flate_quote 表。因此,一个“解决方案”是删除超过 5 天前完成的所有报价: DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 5 DAY)

这大大减少了查询的持续时间。0.3秒!

现在,我想知道你们中的一些人是否找到了另一种解决方案。我正在考虑删除观察者,并每天刷新规则(促销)。副作用是价格的更新并没有立即体现在促销活动中。

另一种解决方案是在后台运行它。我买了 Magento Embedded ERP,它有一个后台任务的概念,我会检查我是否可以将这个插入到 ERP 任务之上。所以当我保存产品时,会在后台创建一个任务来运行“applyAllRulesOnProduct”

请注意,我的数据库中有 30 000 种产品,我每天都会与供应商同步价格。在每次更新 10 秒之前,幸运的是只有少数产品的价格每天都在变化,否则需要 10*30000/3600= 超过 2 天 :-)

感谢有关缩短产品更新时间的任何帮助。

4

1 回答 1

0

您可以通过以下方式禁用关联事件:

$product->setIsMassupdate(true);
$product->setExcludeUrlRewrite(true);
于 2013-04-29T10:39:32.343 回答