Перейти к содержимому
Русский язык для Invision Community 5

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

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

 

$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 осуществляется не регулярным выражением а строковыми функциями. И сделано там это в угоду оптимизации. Я просто не понимаю если она с кешированнием всех авторов сообщений темы или это излишне и достаточно кеша только пользователя для которого требуется проверка. Кеш это статическая переменная.

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.