PERF: Reduce size of search payload by removing unused topic attributes.

This commit is contained in:
Guo Xiang Tan 2020-07-16 11:48:28 +08:00
parent 88a43ef800
commit 84de643c04
No known key found for this signature in database
GPG Key ID: FBD110179AAC1F20
2 changed files with 57 additions and 6 deletions

View File

@ -5,11 +5,20 @@ class SearchTopicListItemSerializer < ListableTopicSerializer
attributes :category_id
def include_image_url?
false
end
def include_thumbnails?
false
%i{
image_url
thumbnails
title
created_at
last_posted_at
bumped_at
bumped
highest_post_number
reply_count
unseen
}.each do |attr|
define_method("include_#{attr}?") do
false
end
end
end

View File

@ -0,0 +1,42 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe SearchTopicListItemSerializer do
fab!(:admin) { Fabricate(:admin) }
fab!(:post) { Fabricate(:post) }
let(:topic) { post.topic }
let(:serializer) do
SearchTopicListItemSerializer.new(topic, scope: Guardian.new(admin), root: false)
end
it 'should only include the required keys' do
current_keys = serializer.as_json.keys
expected_keys = [
:id,
:fancy_title,
:slug,
:posts_count,
:archetype,
:pinned,
:unpinned,
:visible,
:closed,
:archived,
:bookmarked,
:liked,
:category_id
]
extra_keys = current_keys - expected_keys
missing_keys = expected_keys - current_keys
expect(extra_keys).to eq([]), lambda {
"Please verify if the following keys are required as part of the serializer's payload: #{extra_keys.join(", ")}"
}
expect(missing_keys).to eq([])
end
end