Плагин тормозит загрузку

Установлена epochta и плагин на отсылку смс клиенту при размещении заказа. Беда в том что между нажатием на клавишу «оформить заказ» и появлением thankyou page проходит около 2 секунд в течении которых, видимо работает плагин, сама страница генерируется без задержек. Если плагин отключить, все как обычно летает.


плагин

switch ($modx->event->name) {
	case 'msOnChangeOrderStatus':
        if ($status==1) {
$order = $modx->getObject('msOrder', $order->get('id'));
$myOrder = $order->toArray();
$myOrderAddress = $order->getOne('Address')->toArray();
$order_num = $order->get('num');
$receiver = $myOrderAddress['receiver'];
$phone = $myOrderAddress['phone'];
$message = "Спасибо за заказ №".$order_num.". Мы свяжемся с вами в ближайшее время.";
$ePochta = $modx->getService('epochta', 'ePochta', $modx->getOption('epochta_core_path', null, $modx->getOption('core_path') . 'components/epochta/') . 'model/epochta/', $scriptProperties);
$ePochta->initialize();
if (!($ePochta instanceof ePochta)) exit('Could not initialize ePochta!');
if (!$ePochta->sendSMS_now($phone, $message, 0)) {
    echo "ERROR!";
}}}
Артем
22 октября 2015, 13:59
modx.pro
965
0

Комментарии: 7

Антон Пастухов
22 октября 2015, 17:40
+1
$order = $modx->getObject('msOrder', $order->get('id'));
Эта строчка не имеет смысла. У вас уже есть объект, и вы просто получаете его же еще раз. Ее можно просто убрать.

$myOrder = $order->toArray();
$myOrderAddress = $order->getOne('Address')->toArray();
Возможно, быстрее будет так:
$myOrder = $order->toArray();
$myOrderAddress = $myOrder['Address'];
Попробуйте.
    Артем
    22 октября 2015, 17:56
    0
    Спасибо, попробовал, но к сожалению не помогает. Тормозит как я понимаю именно
    if (!$ePochta->sendSMS_now($phone, $message, 0)) {
        echo "ERROR!";
    }
    так как если добавить второй номер и сообщение, то скорость падает еще в два раза
    Василий Наумкин
    22 октября 2015, 17:49
    +1
    Время на соединение с посторонним сервисом никак не убрать.

    Единственный возможный способ — это сохранять данные в отдельную таблицу и отправлять потом сообщения из неё по расписанию.
      Артем
      22 октября 2015, 17:54
      0
      А никаких событий нет, которые наступают уже после оформления заказа, ну типа msOnAfterChangeOrderStatus?
        Василий Наумкин
        22 октября 2015, 19:48
        +1
        А какая разница? Здесь речь о выполнении чего-то, что запросил пользователь.

        Он и будет ждать, пока оно выполнится. То есть, запрос или синхронный, или асинхронный.
      Артем
      22 октября 2015, 17:51
      0
      ошибка
        Воеводский Михаил
        22 октября 2015, 17:52
        +1
        основная задержка наверняка при отправке. Поставьте счетчики времени до и после метода sendSMS_now(), посмотрите на его время выполнения.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7