Производительность метода экземпляра класса Singleton против метода статического класса в PHP? - PullRequest
4 голосов
/ 05 августа 2010

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

-Майк

Ответы [ 5 ]

16 голосов
/ 06 августа 2010

Проверьте эту таблицу:)

alt text

взято из этой статьи

16 голосов
/ 05 августа 2010

Если вы не вызываете их в узком цикле (то есть, нет другого значимого кода, где накладные расходы значительны) тысячи или сотни тысяч раз, не беспокойтесь об этом. Разница, скорее всего, будет меньше микросекунды, поэтому не стоит беспокоиться. Просто сделайте лучший архитектурный выбор ...

Premature optimization is the root of all evil...

Редактировать: Для всех downvoters вот сообщение в блоге , которое я написал, которое описывает почему подобные сравнения производительности практически бесполезны.

3 голосов
/ 06 августа 2010

Прежде чем вы сможете вызвать метод экземпляра объекта-шаблона-одиночки, вам нужно сначала получить экземпляр, для чего требуется статический вызов метода:

SomeClass::getInstance()->myMethod();
// versus
SomeClass::myMethod();

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

1 голос
/ 14 января 2011

Я немного опоздал на этот разговор, но, только найдя вопрос, который я решил, я бы выбросил свои мысли на ринг для моего первого поста на SO.

В качестве быстрого эксперимента (после прочтения статьи, связанной с zolex), я добавил третий контрольный пример к тестам статьи:

$inst = TestSingleton::getInstance();  
for($i=0;$i<$runs;$i++) $inst->test();

Конечно, результаты не были согласованы на 100%, но я обнаружил, что в большинстве случаев при выполнении 500 000 вызовов через все три метода вышеуказанный метод выполнялся где-то на 2-3 секунды быстрее, чем любой из двух других.

Хотя я всегда съеживаюсь, когда вижу приведенную цитату «преждевременной оптимизации», в этом случае я думаю, что она бьет по голове. Разница в производительности в лучшем случае минимальна, и обычно в пользу более разумного использования синглтона.

1 голос
/ 05 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...