Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
siv1987

Не понимаю логику автора плагина

Рекомендованные сообщения

Пишу простенький плагин хайда. Для условия просмотра скрытого текста "требуется ответ в этой теме" в аналогичном плагине автор использует такой код

 

$topicCache[ $post->topic_id ]['repliesCached'] = 'CACHED'; // Skipping TRUE here or it might be seen as ID 1 sometimes..

// Load all visible replies into memory in case we have other members too (email notifications?)
$topicCache[ $post->topic_id ] = $topicCache[ $post->topic_id ] + iterator_to_array( \IPS\Db::i()->select( 'DISTINCT(author_id)', 'forums_posts', array( 'topic_id=? AND queued=?', $post->topic_id, 0 ) )->setKeyField( 'author_id' ) );

// Check again member IDs with replies now
if ( isset($topicCache[ $post->topic_id ][ \IPS\Member::loggedIn()->member_id ]) )
{
return TRUE;
}

Не понимаю, зачем запрашивать всех авторов сообщений в теме, если проверяется только один текущий пользователь? Неужели это будет быстрее чем поиск только одного пользователя по topic_id=? AND queued=? AND author_id=?

Да, индекс `topic_id` состоит из (`topic_id`,`queued`,`post_date`,`author_id`) для полноценного использования с условием author_id мешает post_date, но это не значит что индекс не будет использоваться совсем.

Или автор хочет избавится совсем от обращение к диску и работать только с индексом? А если есть 100 и более авторов в теме? Или такие темы встречаются на часто, а для обычных форумов такой запрос будет быстрее?

Поделиться сообщением


Ссылка на сообщение

Наверное зависит от конкретного пользователя. Если у него 100500 сообщений в разных темах, такая проверка разве не лучше?

Возможно, проще найти такого юзера тут, пальцем показывать не буду, и просто сравнить скорость выполнения запросов, в темах с разным количеством авторов? :)

Поделиться сообщением


Ссылка на сообщение

Но условие требуется для текущей темы - есть ли у пользователя одно сообщение в ней или нет чтобы увидеть скрытый текст.

Задумка автора наверная была в том, чтобы использовать только индекс, но он выбирает поле author_id. Вопрос, а будет ли в этом случае author_id браться из последней части индекса или будет обращение к диску? (надо бы посмотреть explain селекта) Если обращение к диску, то не проще бы лимитировать поиск одной записью в этой теме пользователя который просматривает ее.

 

Если посмотреть этот плагин (Hide Content Until Users Reply), то он весь основан на оптимизации. Даже замена ббкода hide осуществляется не регулярным выражением а строковыми функциями. И сделано там это в угоду оптимизации. Я просто не понимаю если она с кешированнием всех авторов сообщений темы или это излишне и достаточно кеша только пользователя для которого требуется проверка. Кеш это статическая переменная.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...