PERF: Move user-tips and narrative to per-user messagebus channels (#19773)
Using a shared channel with per-message permissions means that every client is updated with the channel's 'last_id', even if there are no messages available to them. Per-user channel names avoid this problem - the last_id will only be incremented when there is a message for the given user.
This commit is contained in:
parent
939c2a7371
commit
79bea9464c
|
@ -13,11 +13,19 @@ export default {
|
|||
this.messageBus = container.lookup("service:message-bus");
|
||||
this.site = container.lookup("service:site");
|
||||
|
||||
this.messageBus.subscribe("/user-tips", this.onMessage);
|
||||
this.messageBus.subscribe(
|
||||
`/user-tips/${this.currentUser.id}`,
|
||||
this.onMessage
|
||||
);
|
||||
},
|
||||
|
||||
teardown() {
|
||||
this.messageBus?.unsubscribe("/user-tips", this.onMessage);
|
||||
if (this.currentUser) {
|
||||
this.messageBus?.unsubscribe(
|
||||
`/user-tips/${this.currentUser.id}`,
|
||||
this.onMessage
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
@bind
|
||||
|
|
|
@ -251,7 +251,11 @@ class UserUpdater
|
|||
end
|
||||
end
|
||||
if attributes.key?(:seen_popups) || attributes.key?(:skip_new_user_tips)
|
||||
MessageBus.publish("/user-tips", user.user_option.seen_popups, user_ids: [user.id])
|
||||
MessageBus.publish(
|
||||
"/user-tips/#{user.id}",
|
||||
user.user_option.seen_popups,
|
||||
user_ids: [user.id],
|
||||
)
|
||||
end
|
||||
DiscourseEvent.trigger(:user_updated, user)
|
||||
end
|
||||
|
|
|
@ -15,9 +15,9 @@ export default {
|
|||
this.appEvents = container.lookup("service:app-events");
|
||||
|
||||
withPluginApi("0.8.7", (api) => {
|
||||
const currentUser = api.getCurrentUser();
|
||||
this.currentUser = api.getCurrentUser();
|
||||
|
||||
if (!currentUser) {
|
||||
if (!this.currentUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -41,17 +41,19 @@ export default {
|
|||
);
|
||||
|
||||
this.messageBus.subscribe(
|
||||
"/new_user_narrative/tutorial_search",
|
||||
`/new_user_narrative/tutorial_search/${this.currentUser.id}`,
|
||||
this.onMessage
|
||||
);
|
||||
});
|
||||
},
|
||||
|
||||
teardown() {
|
||||
this.messageBus?.unsubscribe(
|
||||
"/new_user_narrative/tutorial_search",
|
||||
this.onMessage
|
||||
);
|
||||
if (this.currentUser) {
|
||||
this.messageBus?.unsubscribe(
|
||||
`/new_user_narrative/tutorial_search/${this.currentUser.id}`,
|
||||
this.onMessage
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
@bind
|
||||
|
|
|
@ -173,7 +173,11 @@ module DiscourseNarrativeBot
|
|||
topic = @post.topic
|
||||
post = topic.first_post
|
||||
|
||||
MessageBus.publish("/new_user_narrative/tutorial_search", {}, user_ids: [@user.id])
|
||||
MessageBus.publish(
|
||||
"/new_user_narrative/tutorial_search/#{@user.id}",
|
||||
{},
|
||||
user_ids: [@user.id],
|
||||
)
|
||||
|
||||
raw = <<~MD
|
||||
#{post.raw}
|
||||
|
|
|
@ -551,7 +551,7 @@ RSpec.describe UserUpdater do
|
|||
context "when skip_new_user_tips is edited" do
|
||||
it "updates seen_popups too" do
|
||||
messages =
|
||||
MessageBus.track_publish("/user-tips") do
|
||||
MessageBus.track_publish("/user-tips/#{user.id}") do
|
||||
UserUpdater.new(Discourse.system_user, user).update(skip_new_user_tips: true)
|
||||
end
|
||||
|
||||
|
@ -573,7 +573,7 @@ RSpec.describe UserUpdater do
|
|||
context "when seen_popups is edited" do
|
||||
it "publishes a message" do
|
||||
messages =
|
||||
MessageBus.track_publish("/user-tips") do
|
||||
MessageBus.track_publish("/user-tips/#{user.id}") do
|
||||
UserUpdater.new(Discourse.system_user, user).update(seen_popups: [1])
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue