2014-12-21 2 views
0

사용자 정의 모듈의 컨트롤러에서 다음 코드를 사용하여 AJAX 호출을 사용하여 주문 상태를 변경하면 매우 느리게 실행됩니다. Google에서 검색했지만 주제가 없습니다.magento 프로그래밍 방식으로 저장하는 데 시간이 너무 오래 걸린다

실행 시간을 테스트하기 위해 time() 행을 추가했습니다. 각 통화를 마치려면 30 ~ 40 초가 걸립니다. Mage_Adminhtml_Sales_OrderController에이 코드를 사용하여 백엔드에서 주문 상태를 변경할 수 있지만 매우 빠르게 반환되며 exetime0과 같습니다. 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; 
} 

답변

0

나는 magento가 고객에게 이메일을 보내려고 할 때 문제가 있다고 생각합니다. setIsCustomerNotified 메소드의 매개 변수를 true로 변경하거나 magento 전자 메일 통신을 비활성화하십시오. 도움이된다면 이메일을 올바르게 보내도록 서버를 구성해야합니다.

+0

안녕하세요 Maciej, 답변 해 주셔서 감사합니다. 이메일을 보내도록 서버를 설정했습니다. setIsCustomerNotified를 false로 설정하면 이메일을 보내지 않습니다. 또한'setStatus ($ status)'를 사용하여 주문 상태를 변경하는 다른 방법을 변경하려고 시도했습니다. 결과는'$ order-> save()'가 끝나는 데 30 초 이상 걸리는 것과 같다. – Mike

+0

저장 순서에 따라 일정에 따라 프론트 엔드에서만 실행되는 이벤트가있을 수 있으므로 실행 시간이 백엔드와 다릅니다. –

+1

안녕 Maciej, 도와 줘서 고마워! 예, 이유를 찾았습니다. Mage/RSS 모듈은 'orderNotify'와 'NewOrder'의 두 함수를'order_after_save' 이벤트에 연결했습니다. 이 두 함수는 RSS 알림을 새로 고치기 위해 디스크의 캐시를 검사하고 정리하기 때문에 완료하는 데 오랜 시간이 걸립니다. 나는 전화가 매우 빨리 끝나는 지금 그것들을 사용하지 않았다! – Mike

관련 문제