Влияет ли попытка php 5 на производительность, когда исключение не обнаружено - PullRequest
2 голосов
/ 27 января 2010

Кто-то очень умный на работе сказал мне, что попытка ловить, не бросая, повлияет на производительность сайта с миллионами пользователей. основываясь на опубликованном модульном тесте, показывающем одинаковую производительность, мне интересно, связано ли это с уровнем ОС и / или с конкретной ситуацией на веб-сервере. Например, реализация асинхронной работы веб-сервера происходит на дочерних процессах, а не на потоках.

Кто-нибудь знает?

Я хотел бы видеть вывод профилировщика php, показывающий фактическое использованное время процессора.

Комментарий jmucchiello к Производительность try-catch в php интересна, но не измеряет время процессора.

Спасибо, David

1 Ответ

12 голосов
/ 27 января 2010

Я провел очень маленький и ненаучный тест и обнаружил, что нет никакой разницы между наличием улова, который никогда не вызывается, и тем, что он находится вне оператора try catch. Я запускал каждый из этих двух сценариев 5 раз каждый через свой профилировщик и усреднял общее время.

Результаты

  • С оператором Try / Catch: 1,34 секунды
  • Без оператора Try / Catch: 1,3 секунды

Код

Try / Поймать

<?php
foreach(range(1,200000) as $i) {
    try {
         if ($i % 5 == 0 && $i % 3 == 0)    echo "fizzbuzz";
         elseif ($i % 5 == 0)               echo "fizz";
         elseif ($i % 3 == 0)               echo "buzz";
         else                               echo $i;
     } catch (Exception $e) {
         echo sin($i) * cos($i * pi());
     }
}

?>

Нет пробовать / ловить

<?php
foreach(range(1,200000) as $i) {
     if ($i % 5 == 0 && $i % 3 == 0)    echo "fizzbuzz";
     elseif ($i % 5 == 0)               echo "fizz";
     elseif ($i % 3 == 0)               echo "buzz";
     else                               echo $i;
}

?>
...