mirror of
https://github.com/discourse/discourse.git
synced 2025-01-19 11:02:46 +08:00
18c542dc02
What is the problem? The TopicTrackingState is a service on the client side that is used to store state of topics which is new or has unread posts for a given user. The state is updated via various means and the one in concern here is whenever we load a new topic list from the server. When a topic list is loaded from the server, we sync this new topic list with the states in TopicTrackingState. There is also a hard limit on the number of states that is stored by TopicTrackingState for performance reasons and the limit is currently set to 4000. It was noticed that once this limit has been reached, syncing a topic list with TopicTrackingState can result in the registered state change callbacks to be called unnecessarily. This is because during `TopicTrackingState#sync` we call `TopicTrackingState#removeTopic` if the topic in question is neither new or unread to a user. However, `TopicTrackingState#removeTopic` would call `TopicTrackingState#_afterStateChange` even if nothing was removed. What is the fix? This commit fixes the problem by checking that `TopicTrackingState#_afterStateChange` is only called in `TopicTrackingState#removeTopic` when a topic is actually removed. |
||
---|---|---|
.. | ||
assets | ||
controllers | ||
helpers | ||
jobs | ||
mailers | ||
models | ||
serializers | ||
services | ||
views |