mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 17:06:31 -06:00
24db6fbb73
When loading posts in a topic, the topic level guardian checks are run multiple times even though all the posts belong to the same topic. Profiling in production revealed that this accounted for a significant amount of request time for a user that is not staff or anon. Therefore, we're optimizing this by adding memoizing the topic level calls in `PostGuardian`. Speficifally, the result of `TopicGuardian#can_see_topic?` and `PostGuardian#can_create_post?` method calls are memoized per topic. Locally profiling shows a significant improvement for normal users loading a topic with 100 posts. Benchmark script command: `ruby script/bench.rb --unicorn --skip-bundle-assets --iterations 100` Before: ``` topic user: 50: 114 75: 117 90: 122 99: 209 topic.json user: 50: 67 75: 69 90: 72 99: 162 ``` After: ``` topic user: 50: 101 75: 104 90: 107 99: 184 topic.json user: 50: 53 75: 53 90: 56 99: 138 ``` |
||
---|---|---|
.. | ||
bookmark_guardian.rb | ||
category_guardian.rb | ||
ensure_magic.rb | ||
group_guardian.rb | ||
post_guardian.rb | ||
post_revision_guardian.rb | ||
tag_guardian.rb | ||
topic_guardian.rb | ||
user_guardian.rb |