From 5fb655b6bf8deccfb4b8e7f60dfae8fc3b5aef9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Saquetim?= Date: Fri, 21 Oct 2022 02:01:37 -0300 Subject: [PATCH] WIP: Some hooks for perfomance optimizations in `discourse-circles` --- app/controllers/groups_controller.rb | 5 ++++ app/models/category_list.rb | 5 ++++ app/models/site.rb | 36 ++++++++++++++++++---------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 4a772039f6..26233eb33a 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -80,6 +80,11 @@ class GroupsController < ApplicationController type_filters = type_filters - %i[my owner] end + modifiers = [] + # some plugins may need to change the query + DiscourseEvent.trigger(:query_groups_list, modifiers, groups, @guardian, params) + modifiers.each { |mod| groups = mod.call(groups) } + type_filters.delete(:non_automatic) # count the total before doing pagination diff --git a/app/models/category_list.rb b/app/models/category_list.rb index 38a55042a7..62d5f8829b 100644 --- a/app/models/category_list.rb +++ b/app/models/category_list.rb @@ -121,6 +121,11 @@ class CategoryList @categories = self.class.order_categories(@categories) + modifiers = [] + # some plugins may need to change the categories cached on site load + DiscourseEvent.trigger(:query_categories_list, modifiers, @categories, @guardian, @options) + modifiers.each { |mod| @categories = mod.call(@categories) } + @categories = @categories.to_a include_subcategories = @options[:include_subcategories] == true diff --git a/app/models/site.rb b/app/models/site.rb index 5d3b4565bc..b8d60fbda3 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -71,19 +71,29 @@ class Site .cache .fetch(categories_cache_key, expires_in: 30.minutes) do categories = - Category - .includes( - :uploaded_logo, - :uploaded_logo_dark, - :uploaded_background, - :tags, - :tag_groups, - category_required_tag_groups: :tag_group, - ) - .joins("LEFT JOIN topics t on t.id = categories.topic_id") - .select("categories.*, t.slug topic_slug") - .order(:position) - .to_a + begin + query = + Category + .includes( + :uploaded_logo, + :uploaded_logo_dark, + :uploaded_background, + :tags, + :tag_groups, + category_required_tag_groups: :tag_group, + ) + .joins("LEFT JOIN topics t on t.id = categories.topic_id") + .select("categories.*, t.slug topic_slug") + .order(:position) + .to_a + + modifiers = [] + # some plugins may need to change the categories cached on site load + DiscourseEvent.trigger(:site_query_categories, modifiers, query, @guardian) + modifiers.each { |mod| query = mod.call(query) } + + query.to_a + end if preloaded_category_custom_fields.present? Category.preload_custom_fields(categories, preloaded_category_custom_fields)