사용자 정의 모듈의 컨트롤러에서 다음 코드를 사용하여 AJAX
호출을 사용하여 주문 상태를 변경하면 매우 느리게 실행됩니다. Google에서 검색했지만 주제가 없습니다.magento 프로그래밍 방식으로 저장하는 데 시간이 너무 오래 걸린다
실행 시간을 테스트하기 위해 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;
}
안녕하세요 Maciej, 답변 해 주셔서 감사합니다. 이메일을 보내도록 서버를 설정했습니다. setIsCustomerNotified를 false로 설정하면 이메일을 보내지 않습니다. 또한'setStatus ($ status)'를 사용하여 주문 상태를 변경하는 다른 방법을 변경하려고 시도했습니다. 결과는'$ order-> save()'가 끝나는 데 30 초 이상 걸리는 것과 같다. – Mike
저장 순서에 따라 일정에 따라 프론트 엔드에서만 실행되는 이벤트가있을 수 있으므로 실행 시간이 백엔드와 다릅니다. –
안녕 Maciej, 도와 줘서 고마워! 예, 이유를 찾았습니다. Mage/RSS 모듈은 'orderNotify'와 'NewOrder'의 두 함수를'order_after_save' 이벤트에 연결했습니다. 이 두 함수는 RSS 알림을 새로 고치기 위해 디스크의 캐시를 검사하고 정리하기 때문에 완료하는 데 오랜 시간이 걸립니다. 나는 전화가 매우 빨리 끝나는 지금 그것들을 사용하지 않았다! – Mike