Locations Plugin 🌍

@merefield さん、ありがとうございます。まさに私たちが試した通りです :slight_smile:

残念ですが、まずユーザーリストページを読み込んでから、マップにリダイレクトされてしまいます。

もし、/map などでマップのみが表示されることを期待していました :slight_smile:

「いいね!」 2

了解しました。

しかし、それは赤いニシン(誤った手がかり)です。

バニラのユーザーリストはキャッシュされているため、一瞬で読み込まれます。問題なのは、マップのモデルを読み込むのに必要な時間です。あなたのケースでは、一度に約400人のユーザーが読み込まれるため…つまり、ユーザーリストのレンダリングは処理時間の0.1%しか無駄にしていませんが、真の問題は後者です。それに対する即効性のある解決策はないかもしれません。

私がこのことを部分的に理解しているのは、以前この機能を使っていなかったサイトにデプロイしたばかりだからです。マップデータが非常に速く読み込まれるため、ユーザーリストは(最初に読み込まれているにもかかわらず)表示されません。問題は?これまでに位置をピン留めしたユーザーは2人だけ…現在のアーキテクチャでは、ユーザーマップは拡張性に欠けます。

「いいね!」 3

興味深い洞察をありがとうございます。

現在、コミュニティメンバーの約12%しかマップ上に登録されていませんが、最近、より多くのメンバーをマップに登録するためのキャンペーンについて話し合っていました。

コミュニティが成長し続けるにつれて、マップの読み込みが次第に遅くなることは予想されるでしょうか?

「いいね!」 2

ユーザーリストを最初に読み込む必要があるのも推測できますね。

コードについては何も知らませんが、マップだけをどこかに独立して配置することは可能でしょうか? :thinking: :man_shrugging:

「いいね!」 2

言った通り、それは無関係です。ユーザーリストはキャッシュされており、非常に短いです。

「いいね!」 2

Locations プラグインはこれに独自のモデルを使用しているのでしょうか、それとも既存のコアモデルを使用しているのでしょうか?データベースからユーザー情報の 400 行だけを選択する際のボトルネックはどこにあるのか疑問に思っています。

質問が多くてすみません @merefield、仕組みをより深く理解しようとしています :slight_smile:

「いいね!」 2

問題ありません、リッチー。通常のテーブルでページ分割されたデータよりも一度に多くのユーザーを取得するため、DirectoryItemsController をオーバーライドしています。モデルは変わりません。

これは、ビューポートのサイズと位置を認識する、はるかに複雑なデータストリーミングシステムへの根本的な置き換えが必要です。これは相当な作業になると思います。特に、Discourse に付属するコードをこれまでほど活用できなくなるため、全く異なるユースケースになるからです。しかし、非常に興味深い仕事ですね!

この遅延が_毎回_発生しているという事実は、キャッシュが原因ではないことを示しており、大規模な変更なしに修正できる可能性があります。

「いいね!」 4

単純な Discourse の設定を見逃したり変更したりしたわけではありませんよね?:man_facepalming:

「いいね!」 2

いいえ、あなたの問題ではありません。ただし、現在のプラグインの機能の限界を超えている可能性があります :slight_smile:

時間ができたら、結果をキャッシュしてセッション中にその問題が一度だけ発生するようにするための対策を検討します。それが最も簡単な解決策です。

しかし、より大きな課題としては…

「いいね!」 2

:cry:

@merefield さん、ありがとうございます。ただ、それは少し保留にさせてください。証拠はありませんが、人々はそもそもセッション中に地図を一度しか見ないのではないかという強い疑念があります :thinking:

「いいね!」 2

バグの報告です。

このバグはしばらく前から存在していましたが、ついにロケーションズプラグインが原因であることを特定しました。プラグインを無効にしているときは、ユーザーカードにウェブサイトが正しく表示されますが、有効にすると二重に表示されてしまいます!以下は、ホバー表示されるユーザーカードのスクリーンショットです:

そして、完全に展開されたプロフィールページからの別のスクリーンショットです:

Screen Shot 2020-06-11 at 11.15.36 AM

プロフィールの値を変更する組み合わせを何度も試してテストしました。正しく表示されるのは、ロケーションズプラグインを無効にした場合のみです。つまり、ウェブサイトが一度だけ表示されるのはその時だけです。

「いいね!」 2

ありがとう、カルティック。最新のアップデートを使っていますか?

「いいね!」 2

はい、それについて触れるべきでした。


編集:重複要素に対して生成された 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>
「いいね!」 3

現在、クライアントの業務で手一杯ですが、次のサポートアップグレード期間(来月の1日から5日)に向けては、これを覚えておきます。

「いいね!」 2

片方がクリック可能なリンクとしてスタイリングされ、もう片方がそうでないのは興味深いですね :thinking:

また、当社のフォーラムではこの問題が発生していないのも興味深いです。

「いいね!」 2

@merefield 別の問題が発生しているようです。

現在のユーザーマップには 472 人のユーザーが表示されていますが、いくつかのユーザーから自分のピンがマップに表示されていないとの報告があります。しかし、そのユーザーのカードを表示すると、自分専用の小さなマップには表示されています。

データベースで位置情報が追加されたユーザーを検索すると 492 件の結果が得られるため、約 20 人がマップに表示されていないようです。

この問題のデバッグに何かお手伝いできることはありますか?

Chris のユーザーカードを表示すると、彼の個人プロフィールマップには正常に表示されています:

一方、メインマップでは Chris が表示されていません::thinking:

「いいね!」 1

この設定の値は何ですか、リッチー?

image

例の欠落ユーザーについて、rails コンソールからの結果を PM でお知らせいただけますか:

myuser = User.find_by(username: "===USERNAME===")
myuser.custom_fields["geo_location"]
「いいね!」 2

話がさらに複雑になってきました :smiley:

最初は500に設定されていました。

1000に変更したら、行方不明の人たちがすぐに現れました :thinking:

ご要望通り、結果をPMでお送りします :+1:t2:

「いいね!」 2

ああ、その場合はその情報をPMで送る必要はありませんね。geo_locationsを持つ人のリストには、空白が含まれていた可能性があります(カスタムフィールドは存在するが、空のオブジェクトなど)。その結果、最大数に達してしまっているのかもしれません。最大数を増やせば、空白があっても有効なユーザーが押し出されることはありません。そこでのコード改善は確かに可能ですが、必須ではありません。

「いいね!」 2

@merefield さん、ありがとうございます。いくつかのユーザーで '{}' のような値が見られたため、以前は位置情報を持っていたが、その後削除されたのではないかと推測しています。

また、ユーザーが匿名化された際にこれらの値が削除されるかどうかは覚えていません。これも、私たちが設定していたマジックの 500 という値に引っかかる可能性があります。

よろしくお願いいたします :slight_smile:

「いいね!」 2