PERF: Avoid calling expensive PostGuardian#can_see_post? multiple times.

Before

```
Your Results: (note for timings- percentile is first, duration is second
in millisecs)
---
topic_admin:
  50: 19
  75: 19
  90: 21
  99: 27
topic:
  50: 56
  75: 62
  90: 64
  99: 99
timings:
  load_rails: 1262
ruby-version: 2.4.1-p111
rss_kb: 198432
pss_kb: 136612
virtual: physical
architecture: amd64
operatingsystem: Ubuntu
memorysize: 15.59 GB
kernelversion: 4.10.0
physicalprocessorcount: 1
processor0: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
rss_kb_9877: 327892
pss_kb_9877: 263671
rss_kb_9946: 325468
pss_kb_9946: 261671
rss_kb_10153: 326456
pss_kb_10153: 262657
```

After

```
Your Results: (note for timings- percentile is first, duration is second
in millisecs)
---
topic_admin:
  50: 18
  75: 18
  90: 20
  99: 28
topic:
  50: 41
  75: 42
  90: 46
  99: 49
timings:
  load_rails: 1201
ruby-version: 2.4.1-p111
rss_kb: 187936
pss_kb: 123596
virtual: physical
architecture: amd64
operatingsystem: Ubuntu
memorysize: 15.59 GB
kernelversion: 4.10.0
physicalprocessorcount: 1
processor0: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
rss_kb_26478: 342360
pss_kb_26478: 276696
rss_kb_26547: 340368
pss_kb_26547: 275930
rss_kb_26747: 338964
pss_kb_26747: 274466
```
This commit is contained in:
Guo Xiang Tan
2017-09-08 13:07:22 +08:00
parent 164a388dcc
commit 5d4221fbe1
10 changed files with 52 additions and 32 deletions

View File

@ -57,11 +57,15 @@ describe Guardian do
end
it "returns false when you've already done it" do
expect(Guardian.new(user).post_can_act?(post, :like, taken_actions: { PostActionType.types[:like] => 1 })).to be_falsey
expect(Guardian.new(user).post_can_act?(post, :like, opts: {
taken_actions: { PostActionType.types[:like] => 1 }
})).to be_falsey
end
it "returns false when you already flagged a post" do
expect(Guardian.new(user).post_can_act?(post, :off_topic, taken_actions: { PostActionType.types[:spam] => 1 })).to be_falsey
expect(Guardian.new(user).post_can_act?(post, :off_topic, opts: {
taken_actions: { PostActionType.types[:spam] => 1 }
})).to be_falsey
end
it "returns false for notify_user if private messages are disabled" do
@ -863,11 +867,15 @@ describe Guardian do
end
it "doesn't allow voting if the user has an action from voting already" do
expect(guardian.post_can_act?(post, :vote, taken_actions: { PostActionType.types[:vote] => 1 })).to be_falsey
expect(guardian.post_can_act?(post, :vote, opts: {
taken_actions: { PostActionType.types[:vote] => 1 }
})).to be_falsey
end
it "allows voting if the user has performed a different action" do
expect(guardian.post_can_act?(post, :vote, taken_actions: { PostActionType.types[:like] => 1 })).to be_truthy
expect(guardian.post_can_act?(post, :vote, opts: {
taken_actions: { PostActionType.types[:like] => 1 }
})).to be_truthy
end
it "isn't allowed on archived topics" do