2013-07-08 2 views
1

Когда я начал программировать, моя мотивация заключалась в том, чтобы получить результат, и скорость была для меня не столь важной, но со временем я понял, что скорость очень важна.Что такое быстрые, обычные функции или одиночные шаблоны ООП

Я не думаю, что между нормальными функциями и одиночными патчами ООП есть большая разница, когда дело доходит до производительности, но в любом случае я хотел бы знать, какой из них быстрее.

Итак, что быстрее?

Это:

my_prefix_fn_name($arg1, $arg2); 
my_prefix_fn_name2($arg1, $arg2); 

или это:

Class_Name::fn_name($arg1, $arg2); 
Class_Name::fn_name2($arg1, $arg2); 

или это:

$cname = 'Class_Name'; 
$cname::fn_name($arg1, $arg2); 
$cname::fn_name2($arg1, $arg2); 
+1

Принимая статические методы, вы, вероятно, обнаружите небольшую или NO-разницу в скоростях. –

+0

Между первым и вторым вариантами разница во времени не будет ничем или рядом с ним. Третий вариант потребует немного больших накладных расходов и не должен использоваться, если нет веских оснований для этого. – Orangepill

+0

Вернитесь к мысли, что результат более важен. Если вы не ожидаете огромного объема трафика, такие микро-оптимизации не будут иметь никакого значения. Сосредоточьтесь на том, чтобы убедиться, что ваш код понятен и понятен. –

ответ

1

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

Но, в любом случае, в этом ответе должно было быть сообщение: http://phpperf.com/ (и я еще не знаю, как писать комментарии). Но это дает вам несколько примеров некоторых встроенных скоростей функций.

+0

Хорошо, это, кажется, лучший ответ. Спасибо за эту ссылку. –

0

Измерьте сами!

И помните, что все, что вы измеряете, скорее всего, будет немного иным. Скорость выполнения - это не единственное, что имеет значение. Читаемость кода более важна, поскольку изменение кода обычно на несколько порядков превышает его выполнение.

И, пожалуйста, не забудьте реализовать одиночные игры! Это антипаттерн. Я не буду вдаваться в подробности об этом здесь.

+0

(И статические методы). ** Измерьте себя! ** – Jimbo

-2

Вы попытались выполнить контрольный тест на них, чтобы определить разницу во времени миллисекунды или даже наносекунды времени между примером 1 и примером 2?

Базовый тест тест

[Get datetime for start timestamp] 
    [For Loop, run 1000 times] 
     [Run Function, example 1 or 2] 
    [End For] 
[Get datetime for end timestamp] 

[Print time difference in milliseconds between end and start times] 

Затем сравните. Я не ожидаю, что там будет какая-то разница. Хотя я ожидаю, что третий пример будет иметь немного худшую производительность, но все это незначительно. Все дело в ремонтопригодности вашего кода и времени, потраченного на то, чтобы сделать будущие улучшения, а не на самом деле выдавливать очень незначительные выигрыши в производительности, которые невозможно обнаружить невооруженным глазом.

+0

Псевдокод ftw. – Jimbo

+0

Такие искусственные тесты не приносят пользы. –

+0

Я сделал такой тест раньше и не имеет никакого значения. Чтобы увидеть разницу, я должен запустить код как минимум 10000 раз, а не 1000.;) –

Смежные вопросы