Спасибо @merefield, мы именно это и пробовали ![]()
К сожалению, страница со списком пользователей всё равно загружается первой, и только затем происходит перенаправление на карту.
Я надеялся, что на /map будет доступна только карта ![]()
Спасибо @merefield, мы именно это и пробовали ![]()
К сожалению, страница со списком пользователей всё равно загружается первой, и только затем происходит перенаправление на карту.
Я надеялся, что на /map будет доступна только карта ![]()
Понял.
Но это ложная тревога.
Список пользователей по умолчанию кэшируется, поэтому загружается за долю секунды. Проблема заключается во времени, необходимом для загрузки модели карты, которая в вашем случае содержит около 400 пользователей сразу… так что да, рендеринг списка пользователей тратит лишь 0,1% времени обработки, но настоящая проблема — это вторая часть. Возможно, быстрого решения для этого не существует.
Я знаю это отчасти потому, что только что развернул это на сайте, где ранее эта функция не использовалась. Данные карты загружаются настолько быстро, что список пользователей никогда не успевает стать видимым (несмотря на то, что он загружается первым). В чём загвоздка? На данный момент только два пользователя отметили свои геолокации… Карта пользователей плохо масштабируется при текущей архитектуре.
Интересное наблюдение, спасибо.
В данный момент на карте находится лишь около 12% наших участников сообщества, и недавно мы обсуждали инициативу по привлечению большего числа людей.
Правильно ли я понимаю, что по мере роста нашего сообщества загрузка карты будет становиться всё медленнее и медленнее?
Я тоже предполагаю, что сначала должен загрузиться список пользователей?
Не зная ничего о коде, возможно ли просто разместить карту отдельно где-нибудь?
![]()
Как я уже сказал, это не имеет значения. Список пользователей закэширован и очень короткий.
Использует ли плагин Locations собственную модель для этого или существующую базовую? Мне интересно, где находится узкое место при выборке всего 400 строк с информацией о пользователях из базы данных?
Извините за все вопросы, @merefield, просто пытаюсь лучше понять, как это работает изнутри ![]()
Без проблем, Ричи. Мы переопределяем DirectoryItemsController, чтобы за один раз получать больше людей, чем обычно происходит при постраничной загрузке данных для обычной таблицы. Модель при этом не меняется.
Это действительно требует полной замены на гораздо более сложную систему потоковой передачи данных, которая учитывает размер и положение области просмотра. Боюсь, это довольно большая работа. В частности, потому что мы больше не сможем использовать столько кода, который поставляется с Discourse, это совершенно другой сценарий использования. Однако это довольно интересная задача!
Тот факт, что вы видите эту задержку каждый раз без исключения, говорит о том, что дело не в кэшировании, и это то, что мы, возможно, сможем исправить без масштабных изменений.
Я же не упустил и не изменил какую-то простую настройку Discourse, верно? ![]()
Нет, это не ваша проблема, за исключением того, что вы, возможно, переросли текущие возможности плагина ![]()
Как только у меня появится возможность, я изучу, что потребуется для кэширования результатов, чтобы вы сталкивались с этой проблемой только один раз за сессию. Это самый простой вариант.
Однако более сложная задача…
![]()
Спасибо @merefield, но пока воздержитесь от этого. У меня нет никаких доказательств ни в ту, ни в другую сторону, но я сильно подозреваю, что люди в любом случае смотрят на карту только один раз за сессию ![]()
Отчёт об ошибке.
Эта ошибка существует уже давно, но я наконец понял, что виноват плагин Locations. Когда плагин отключён, мой сайт отображается на карточке пользователя правильно, но при его включении он показывается дважды! Вот скриншот карточки пользователя, которая появляется при наведении:
и ещё один со страницы профиля в полностью развёрнутом виде:

Я многократно проверял это, меняя различные комбинации значений в профиле. Единственный раз, когда всё отображается корректно, то есть сайт показывается только один раз, — это когда плагин Locations отключён.
Спасибо, Картик, ты на последнем обновлении?
Да, я должен был упомянуть об этом.
РЕДАКТИРОВАНИЕ: HTML, сгенерированный для дублирующегося элемента:
<span id="ember858" class="ember-view"> <div id="ember860" class="user-location-and-website-outlet replace-location ember-view"><!----><div class="user-profile-website">
<svg class="fa d-icon d-icon-globe svg-icon svg-string" xmlns="http://www.w3.org/2000/svg"><use xlink:href="#globe"></use></svg>
<span title="http://ks.cs.uchicago.edu">ks.cs.uchicago.edu</span>
</div>
</div>
</span>
Сейчас я занят работой с клиентами, но обязательно учту это в преддверии следующего периода поддерживаемого обновления (с 1 по 5 число следующего месяца).
Интересно, что один оформлен как кликабельная ссылка, а другой — нет ![]()
Также интересно, что у нас на форуме этой проблемы не наблюдается.
Похоже, у нас возникла ещё одна проблема, @merefield
Наша карта пользователей в настоящее время отображает 472 пользователя, но несколько человек сообщили, что их метка не отображается на карте. Однако при просмотре их карточки пользователя они видны на их собственной маленькой карте.
Когда мы выполняем запрос к базе данных для пользователей с добавленным местоположением, мы получаем 492 результата, то есть около 20 из них не отображаются на карте.
Можем ли мы что-то сделать, чтобы помочь отладить эту проблему?
Просматривая карточку пользователя Криса, видно, что он корректно отображается на своей собственной карте профиля:
Полная / основная карта: Криса нет ![]()
Каково значение этой настройки, Ричи?

Для примера с отсутствующим пользователем, пожалуйста, отправьте мне в личное сообщение результат выполнения этого кода из консоли Rails:
myuser = User.find_by(username: "===USERNAME===")
myuser.custom_fields["geo_location"]
Сюжет усложняется ![]()
Оно было установлено на 500.
Я изменил его на 1000, и наши пропавшие люди мгновенно появились ![]()
Я отправлю тебе результаты в личные сообщения, как и просил ![]()
Ах, в таком случае нет необходимости пересылать эту информацию в личные сообщения. Я подозреваю, что в списке людей с geo_locations могли оказаться записи с пустыми значениями (например, пользовательское поле существует, но объект пуст), и из-за этого вы, возможно, упираетесь в максимальное количество. Увеличьте максимальное число, и даже если будут пустые значения, они не вытеснят действительных пользователей. Код там, безусловно, можно улучшить, но это не критично.
Спасибо, @merefield. Мы заметили, что у нескольких пользователей в значении встречается что-то вроде '{}', так что, возможно, у них когда-то была локация, но её позже удалили.
Также я не помню, удаляются ли такие значения при анонимизации пользователя — это снова могло бы сбить нас с толку из-за магического порога в 500, который мы установили.
Спасибо ![]()