Время выполнения с условиями if или - PullRequest
0 голосов
/ 07 декабря 2011

Учитывая этот класс

Класс 1

class myclass {
    public static function myfunction($condition, $string)
    {
        if ($condition) {
            // A lot of code here
            // This is just a stupid example
            echo $string;
        }
    }
}

Класс 2

class myclass {
    public static function myfunction($condition, $string)
    {
        // A lot of code here
        // This is just a stupid example
        echo $string;
    }
}

и следующие файлы:

Файл 1

myclass::myfunction(($i > 1), '$i is > of 1');
myclass::myfunction(($i > 2), '$i is > of 2');
myclass::myfunction(($i > 3), '$i is > of 3');
myclass::myfunction(($i > 4), '$i is > of 4');
myclass::myfunction(($i > 5), '$i is > of 5');
...
myclass::myfunction(($i > 50), '$i is > of 50'); // this is the amount of functions calls in my project more or less...

Файл 2

if ($i > 1) { myclass::myfunction('$i is > of 1'); }
if ($i > 2) { myclass::myfunction('$i is > of 2'); }
if ($i > 3) { myclass::myfunction('$i is > of 3'); }
if ($i > 4) { myclass::myfunction('$i is > of 4'); }
if ($i > 5) { myclass::myfunction('$i is > of 5'); }
...
if ($i > 50) { myclass::myfunction('$i is > of 50'); }

Какой файл будет работать быстрее (с учетом обоих 2разные классы) на одной рабочей базе?Запрашивает ли метод кеширования PHP-метод или просто ищет класс, метод и затем выполняет его?Это сильно изменится, если я сохраню условие внутри метода (чтобы метод был выполнен)?

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Секунда быстрее, так как не вызывает статический метод 50 раз (если $ i не равен 50).
Это похоже на некоторый недостаток дизайна, группировка сравнения может работать лучше для вас.

1 голос
/ 07 декабря 2011

Я бы предположил, что случай 2 технически быстрее, потому что вам не нужно передавать выражение, и функция даже не вызывается, если выражение ложно (спасибо ajreal!).Даже в худшем случае, когда выражение всегда ложно, второе будет быстрее (по крайней мере, в C ++), если компилятор не оптимизирует передачу выражения.

Однако теоретически они оба имеют одинаковое время выполнения.(BigO-мудрый), и если у вас есть проблемы с производительностью, это не причина их.Другими словами, разница незначительна.Преждевременная оптимизация - корень всего зла.

Если вы все еще настаиваете на том, что это важно, не составит труда оценить себя.Попробуйте выполнить каждые десять тысяч раз со случайными выражениями / строками и сравните разницу во времени.

...