Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

$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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.