@orsha-ivanov

Расходуются ли ресурсы на try catch?

try {
    if ($test == 0) {
        #code
    } ifelse ($test == 1) {
        // Тут может быть выброс
    } else {
        #code
    }
} catch (Test $test) {
    echo $test->getMessage();
}

if ($test == 0) {
    #code
} ifelse ($test == 1) {
    try {
        // Тут может быть выброс
    } catch (Test $test) {
        echo $test->getMessage();
    }
} else {
    #code
}

Во втором логическом блоке ловим выброс только в условии ifelse, расходуются ли лишние ресурсы в первом логическом блоке на отлов выброса в условии if и else, если выброс в них не предусмотрен даже?
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
по существу вопроса можете ознакомиться со статьёй
https://php.watch/articles/php-exception-performance

try/catch просто как логические блоки на производительность влияют не больше чем if/else.
spoiler
5f9dcf8ae478d369638697.png


p.s. если волнует производительность вашего приложения, то в 99% случаев чтобы решить любые проблемы с тормозящим приложением - достаточно знать что такое кэширование, и как профилировать и оптимизировать запросы к БД.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Закономерный вопрос.
Не научившись толком отличать 0 от false, и не научившись правильно писать elseif, каждый нуб в обязательном порядке озабочивается Вселенской Проблемой Производительности.
"Как же так" - проснувшись одним прекрасным утром думает он - "Как только мой сайт достигнет пиковой нагрузки два посетителя в час, то начнутся стрррашные проблемы с производительностью! И надо срочно, забыв все на свете и теряя на ходу тапки, кидаться их решать!!!1111"
Дальше выбирается любой рандомный оператор и появляется ВОПРОС: "А не слишком ли медленно ли он выполняется?!"

И что характерно, чаще всего, как и сейчас, сам по себе оператор является бессмысленным, и вопрос должен быть не "не слишком ли он медленный?", а "на кой он вообще здесь сдался?"

Наличие операторов в коде должно быть продиктовано не пубертатными фантазиями про "потребление ресурсов", а алгоритмом. Где оператор на своем месте - там он и должен стоять.
В данном случае никакой трай с кетчем тут сто лет в обед не сдался, поэтому просто убрать его совсем. И всё сразу начнет летать, конечно же.

Вот кстати я всегда говорил: то что для нормальных людей анекдот, для похапистов - суровая реальность. Каждый второй вопрос на тостере - это анекдот про "у таракана уши в ногах". Или анекдот про срочное обрезание - типичный пример XY problem. Ну или сейчас:

Идет мент. Смотрит - фонарь стоит, под фонарем лужа, в луже мужик сидит.
- Чё здесь делаешь?
- Да вот, часы потерял. теперь ищу.
Ну, мент думает - дай помогу. Искал-искал, весь перемазался - нету часов.
- Слушай, мужик. Нету тут никаких часов!
- Да я знаю. Я их вон там, возле забора потерял.
- А ЧЕ ТЫ ИХ ЗДЕСЬ ИЩЕШЬ???
- А тут светлее!


То есть вопрос тут такой же - ставить трай кетч не там где нужно по логике, а тем где "быстрее"!
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
где логические блоки содержат методы моделей выдающих сообщения пользователю - бросают исключения
Логика построенная на исключениях - плохая логика, так делать не нужно в принципе. Вопрос действительно идиотский, учитывая что он вырван из контекста вашей "гениальной" идеи. Ексепшны вообще не для этого, они по тому и ексепшны, что обрабатывают логику, с возможно нестабильным поведением ресурсов. В остальных случаях их применение не оправдано логически. А производительность операторов вообще должна быть для программиста на последнем месте, то есть когда ВСЯ логика написана верно, и вот какой-то блок кодак исполняется медленно. Тогда (и только тогда) есть смысл что-то оптимизировать, править, ускорять и тп. А ваши абстрактные вопросы больше относятся к области "почему травка зеленая а солнышко светит?", стыдно должно быть.

PS: ifelse вообще шедевр, ясчитаю.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы