PERF: Do not include thumbnail information in default topic list payload (#10163)

Now it is only included when a theme/plugin has requested it.
This commit is contained in:
David Taylor
2020-07-06 10:59:21 +01:00
committed by GitHub
parent 5284d41a8e
commit cb1b472a0f
3 changed files with 38 additions and 33 deletions

View File

@@ -101,12 +101,20 @@ class Topic < ActiveRecord::Base
end
end
def image_url
def image_url(enqueue_if_missing: false)
thumbnail = topic_thumbnails.detect do |record|
record.max_width == Topic.share_thumbnail_size[0] &&
record.max_height == Topic.share_thumbnail_size[1]
end
if thumbnail.nil? &&
image_upload &&
SiteSetting.create_thumbnails &&
enqueue_if_missing &&
Discourse.redis.set(thumbnail_job_redis_key([]), 1, nx: true, ex: 1.minute)
Jobs.enqueue(:generate_topic_thumbnails, { topic_id: id })
end
raw_url = thumbnail&.optimized_image&.url || image_upload&.url
UrlHelper.cook_url(raw_url, secure: image_upload&.secure?)
end

View File

@@ -31,7 +31,7 @@ class ListableTopicSerializer < BasicTopicSerializer
has_one :last_poster, serializer: BasicUserSerializer, embed: :objects
def image_url
object.image_url
object.image_url(enqueue_if_missing: true)
end
def thumbnails
@@ -39,6 +39,10 @@ class ListableTopicSerializer < BasicTopicSerializer
object.thumbnail_info(enqueue_if_missing: true, extra_sizes: extra_sizes)
end
def include_thumbnails?
ThemeModifierHelper.new(request: scope.request).topic_thumbnail_sizes.present? || DiscoursePluginRegistry.topic_thumbnail_sizes.present?
end
def include_unicode_title?
object.title.match?(/:[\w\-+]+:/)
end