PHP - Zend Framework - Использование статических методов для доступа к данным - PullRequest
2 голосов
/ 22 сентября 2011

Я читал в Интернете о плюсах и минусах использования статических методов для доступа к данным из базы данных. У меня есть сайт на основе LAMP, построенный на Zend Framework.

Некоторые говорят, что с точки зрения производительности - вряд ли есть какая-либо разница, приведенная здесь анализом Грега Бича

при вызове метода два миллиарда раз вы могли бы сэкономить около 5 мс, сделав его статичным, что примерно равно экономии для каждого вызова метода

Но если я правильно понимаю концепцию статических методов - есть только один экземпляр метода, который означает только одно соединение с БД - так на веб-сайте с высоким трафиком - пока обслуживается один запрос - другие запросы будут поставлены в очередь для тот же метод, верно?

Так что просто хотелось, чтобы ваши мысли и отзывы о том, имеет ли смысл объявлять методы доступа как статические или нет.

Большое спасибо

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Я думаю, что у вас здесь может быть разбитое понимание процессов.

Каждый отдельный запрос отдельного посетителя обслуживается полностью независимо друг от друга. Представьте себе эти 2 независимых запроса:

Request visitor 1              Request visitor 2

index.php                      index.php
creates Zend_Db instance $db   creates Zend_Db instance $db
calls $db->insert()            calls $db->insert()
calls $db->insert() again      calls $db->insert() again

                    \        /
                     \      /
                      \    /

                     Database
           Queue might be something like:

             4. insert 2 from request 2
             3. insert 2 from request 1
             2. insert 1 from request 2
             1. insert 1 from request 1

Другими словами: в основном только сама база данных связана с постановкой в ​​очередь операторов SQL.

PHP-скрипты работают независимо друг от друга. Поэтому создание методов экземпляра или статических методов совершенно не имеет отношения к тому, как SQL-запросы ставятся в очередь.

0 голосов
/ 22 сентября 2011

Статический метод не обязательно означает, что есть только один, это означает, что вам не нужен экземпляр класса для вызова метода. Singleton Pattern может использоваться, если вы хотите, чтобы только один экземпляр объекта существовал в течение всего срока действия запроса.

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

Как сказал fireeyedboy, база данных будет отвечать за постановку запросов в очередь по мере их поступления. В случае большого наплыва запросов каждая страница вызывает вызовы для взаимодействия.с базой данных, возможно, придется подождать, пока более ранние запросы будут обработаны первыми, что приведет к некоторым задержкам в обработке.

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