Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
siv1987

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

Recommended Posts

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

 

$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 и более авторов в теме? Или такие темы встречаются на часто, а для обычных форумов такой запрос будет быстрее?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...