Должен ли я объединить несколько массивов php или нет? - PullRequest
0 голосов
/ 21 августа 2009

У меня есть следующие массивы ниже в PHP, в которых я храню номер user_id для отслеживания модераторов / администраторов на моем сайте, затем на странице я могу просто использовать in_array (), чтобы определить, должны ли пользователи иметь права модератора, Я полагаю, что это сохраняет некоторые запросы MySQL, используя вместо этого массив.

Мне интересно, будет ли какой-нибудь выигрыш в производительности, если объединить их в 1 больший массив вместо отдельных?

Если да, не могли бы вы показать пример, как я могу их объединить и использовать?

Может быть, перечислите некоторые причины, по которым один путь превосходит другой?

$moderators = array(1,99,88,77,2,3,4,5);
$bulletin_moderators = array(1,1091,13,103);
$forum_moderators = array(1,1091,34850,13,103,21);
$blog_moderators = array(1,1091,21);
$photo_moderators = array(1,1091,13,34850,103,21);
$chat_moderators = array(1,44534);

Ответы [ 3 ]

6 голосов
/ 21 августа 2009

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

3 голосов
/ 21 августа 2009

прирост производительности? Нет. Повышение ремонтопригодности? Определенно. Попробуйте это:

$roles=array(
    'moderators'          => array(1,99,88,77,2,3,4,5),
    'bulletin_moderators' => array(1,1091,13,103),
    'forum_moderators'    => array(1,1091,34850,13,103,21),
    'blog_moderators'     => array(1,1091,21),
    'photo_moderators'    => array(1,1091,13,34850,103,21),
    'chat_moderators'     => array(1,44534)
);

Как сказал вышеупомянутый плакат, они действительно не должны быть жестко закодированы. Запрос к БД не займет значительного времени, и он, вероятно, будет кэшироваться в памяти или в самой базе данных (при условии, что вы используете mysql).

Что, если вы добавите больше пользователей? Вы должны будете отредактировать свой источник. Что делать, если у вас было несколько серверов? Вы должны будете отредактировать свой источник на X серверах.

0 голосов
/ 21 августа 2009

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

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

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

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