$error = $this->handle($json);
if ($error === '') {
// логируем что все ок
} else {
// логируем ошибку
}
мне не интересно сейчас спорить по поводу терминов.
Для меня удаление 99 из 100 Exception в коде - это удаление exception. Для кого-то это "правильное использование" (хотя для меня это костыли), сути правок не меняет.
Исключение может кидаться ОДНО. В самом конце.
Ещё вопросы будут?
За работу приложения отвечает множество классов, каждый из них самодостаточно выполняет свою часть работы, и в случае возникновения исключительной ситуации бросает исключение.
Но отказ от стандартных исключений везде где они нужны - это будет как раз вынужденный костыль, ради быстродействия.
$error = $this->handle($json);
if ($error === '') {
// логируем что все ок
} else {
// логируем ошибку
}
Уйдя от исключений вы возможно ушли и от логирования исключений.
Я не стал в вопросе погружать по все тонкости обработки
Сейчас вот до отказа от Exception дошло.
Для оптимизации там уже была выброшена ORM
Я не стал в вопросе погружать по все тонкости обработки
Логирвоание исключений вам замедляют... сами исключения не замедляют
15000 позиций (все с ошибками) - 375 сек.
Если переделать валидацию с Exception на простую проверку строки:
...
То тот же json с 15 тысяч позиций, с ошибками в каждой обрабатывается за те же 2 секунды.
вы хотите решить проблему или нет?
Если у вас там тысячи записей в логи, то скорее всего именно они являются причиной
Тяжело с таким подходом развиваться, но дело ваше
Пока только Армянское Радио подкинул идею, что замедление может быть в том, что симфони пишет в свой лог отдельную запись на каждое исключение - я в этом сомневаюсь
Такие задержки по времени выглядят как проблема на уровне логирования исключений, тк I/O операции над файлом долгие, а сбор трейса исключений и его запись — долгие потенциально.
Уйдя от исключений вы возможно ушли и от логирования исключений.
try {
//
} catch (\Throwable $e) {
// 1. $this->logger->error('Message', ['exception' => $e]);
// 2. $this->logger->error('Message');
// 3. return false;
}
А вот это обидно, так как именно я на это указал в своем ответе и тут вам разные люди пытаются просто это разжевать :(
удивилися или не удивился — не имеет значение, имеет значение график профайлера
walk@home:/var/www/oos-dev/sites/api-purchases$ s app:get-sales-price
Received 2021-11-15 15:39:41
Memory limit: -1
Json size: 892.1 kb
[2021-11-15 15:40:58] Error: {"1":"Product с articleNumber 101206 не найден","2":"Product с articleNumber 605549 не найден","3":"Product с articleNumber 322288 не найден","4":"Product с articleNumber 322288 не найден","5":"Product с articleNumber 322288 не найден","6":"Product с articleNumber 322679 не найден","7":"Product с articleNumber 322679 не найден","8":"Product с articleNumber 101206 не найден","9":"Product с articleNumber 999810 не найден","10":"Product с articleNumber 999810 не найден","11":"Product с articleNumbe...
Общий расход памяти: 10.96 mb
Расход памяти на обработку: 8.67 mb
----------------------------------------->>>
walk@home:/var/www/oos-dev/sites/api-purchases$ XDEBUG_CONFIG=profiler_output_name=sales_price XDEBUG_MODE=profile s app:get-sales-price
Received 2021-11-15 15:41:36
Memory limit: -1
Json size: 892.15 kb
[2021-11-15 15:41:37] Error: {"1":"Product с articleNumber 355212 не найден","2":"Product с articleNumber 605549 не найден","3":"Product с articleNumber 355212 не найден","4":"Product с articleNumber 101206 не найден","5":"Product с articleNumber 101206 не найден","6":"Product с articleNumber 355212 не найден","7":"Product с articleNumber 322288 не найден","8":"Product с articleNumber 322288 не найден","9":"Product с articleNumber 322645 не найден","10":"Product с articleNumber 322288 не найден","11":"Product с articleNumbe...
Общий расход памяти: 10.96 mb
Расход памяти на обработку: 5.52 mb
----------------------------------------->>>
Если 15к - код от разработчиков Симфонии не пролезет без тюнинга механизма обработки исключений.
извините, вы сделали не тюнинг, а то, что Барт на доске написывает
вероятнее всего, форсированно пишется на диск.
if ($constraint->minHeight) {
if (!ctype_digit((string) $constraint->minHeight)) {
throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum height.', $constraint->minHeight));
}
if ($height < $constraint->minHeight) {
$this->context->buildViolation($constraint->minHeightMessage)
->setParameter('{{ height }}', $height)
->setParameter('{{ min_height }}', $constraint->minHeight)
->setCode(Image::TOO_LOW_ERROR)
->addViolation();
return;
}
}