Плагин тормозит загрузку
Установлена 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!";
}}}
Комментарии: 7
$order = $modx->getObject('msOrder', $order->get('id'));
Эта строчка не имеет смысла. У вас уже есть объект, и вы просто получаете его же еще раз. Ее можно просто убрать.$myOrder = $order->toArray();
$myOrderAddress = $order->getOne('Address')->toArray();
Возможно, быстрее будет так:$myOrder = $order->toArray();
$myOrderAddress = $myOrder['Address'];
Попробуйте.
Спасибо, попробовал, но к сожалению не помогает. Тормозит как я понимаю именно
if (!$ePochta->sendSMS_now($phone, $message, 0)) {
echo "ERROR!";
}
так как если добавить второй номер и сообщение, то скорость падает еще в два раза
Время на соединение с посторонним сервисом никак не убрать.
Единственный возможный способ — это сохранять данные в отдельную таблицу и отправлять потом сообщения из неё по расписанию.
Единственный возможный способ — это сохранять данные в отдельную таблицу и отправлять потом сообщения из неё по расписанию.
А никаких событий нет, которые наступают уже после оформления заказа, ну типа msOnAfterChangeOrderStatus?
А какая разница? Здесь речь о выполнении чего-то, что запросил пользователь.
Он и будет ждать, пока оно выполнится. То есть, запрос или синхронный, или асинхронный.
Он и будет ждать, пока оно выполнится. То есть, запрос или синхронный, или асинхронный.
основная задержка наверняка при отправке. Поставьте счетчики времени до и после метода sendSMS_now(), посмотрите на его время выполнения.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.