【问题标题】:magento programmatically saving order takes too longmagento 以编程方式保存订单需要太长时间
【发布时间】:2014-12-21 14:54:56
【问题描述】:

我在自定义模块的控制器中使用以下代码通过AJAX 调用更改订单状态,我发现它运行非常缓慢。我在谷歌上搜索过,但上面没有这样的主题。

我添加了time() 行来测试执行时间。完成每个通话需要 30 - 40 秒。我在Mage_Adminhtml_Sales_OrderController 中使用相同的代码,这样我就可以在后端更改订单状态,但它会很快返回并且exetime 等于0。我认为这与硬件性能无关,因为它运行在 8GB 内存和 8 核 CPU 上。 Magento 需要这么长时间来保存订单是否有任何可能的原因?这个调用是否有一些限制,以便它在后端运行得更快?

public function changestatusAction()
{
    if (!isset($_POST["oid"]) || !$_POST['oid']) {
        echo '{"error":1}';
        return;
    }
    if (!isset($_POST["status"]) || !$_POST['status']) {
        echo '{"error":1}';
        return;
    }
    $errstr = "";


    try{
    $order = Mage::getModel('sales/order')->loadByIncrementId($_POST['oid']);
    $order->addStatusHistoryComment('', $_POST['status'])
                ->setIsVisibleOnFront(false)
                ->setIsCustomerNotified(false);
    $starttime = time();            
    $order->save();
    $endtime = time();   
    $exetime = $endtime - $starttime;    
    }catch(Exception $e){
            $errstr .= $e->getMessage();
    }


    if($errstr)
        echo '{"changed":0,"err":"'.$errstr.'"}';
    else echo '{"changed":1,"exetime":"'.$exetime.'"}';
    return;
}

【问题讨论】:

    标签: ajax magento


    【解决方案1】:

    我认为问题出在 magento 尝试向客户发送电子邮件时。将方法 setIsCustomerNotified 的参数更改为 true 或禁用 magento 电子邮件通信。如果有帮助,您必须配置服务器以正确发送电子邮件

    【讨论】:

    • 您好 Maciej,感谢您的回答。我们已将服务器设置为发送电子邮件。 setIsCustomerNotified 为 false 将不发送电子邮件。我还尝试使用setStatus($status)更改另一种方法来更改订单状态。结果与$order->save() 需要超过 30 秒才能完成的结果相同。
    • 也许您在保存订单上有一些事件,仅在前端触发,因此执行时间与后端不同。
    • 您好 Maciej,感谢您的帮助!是的,我找到了原因。 Mage/RSS 模块将StockNotifyNewOrder 两个函数挂钩到事件order_after_save。这两个函数需要很长时间才能完成,因为它们会扫描并清理磁盘上的缓存以刷新 RSS 通知。我现在禁用了它们,通话很快结束!
    • 您是如何禁用 StockNotify 和 NewOrder 的??
    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多