mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 08:43:25 +08:00
PERF: Cache ToS and Privacy Policy paths (#21860)
Checking if the topic exists happened often and that can cause performance issues.
This commit is contained in:
parent
987ec602ec
commit
5fc1586abf
|
@ -18,11 +18,11 @@ class PostActionTypeSerializer < ApplicationSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def description
|
def description
|
||||||
i18n("description", tos_url: tos_path, base_path: Discourse.base_path)
|
i18n("description", tos_url: tos_url, base_path: Discourse.base_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
def short_description
|
def short_description
|
||||||
i18n("short_description", tos_url: tos_path, base_path: Discourse.base_path)
|
i18n("short_description", tos_url: tos_url, base_path: Discourse.base_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
def name_key
|
def name_key
|
||||||
|
|
|
@ -288,11 +288,7 @@ class SiteSerializer < ApplicationSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def tos_url
|
def tos_url
|
||||||
if SiteSetting.tos_url.present?
|
Discourse.tos_url
|
||||||
SiteSetting.tos_url
|
|
||||||
elsif SiteSetting.tos_topic_id > 0 && Topic.exists?(id: SiteSetting.tos_topic_id)
|
|
||||||
"#{Discourse.base_path}/tos"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def include_tos_url?
|
def include_tos_url?
|
||||||
|
@ -300,11 +296,7 @@ class SiteSerializer < ApplicationSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def privacy_policy_url
|
def privacy_policy_url
|
||||||
if SiteSetting.privacy_policy_url.present?
|
Discourse.privacy_policy_url
|
||||||
SiteSetting.privacy_policy_url
|
|
||||||
elsif SiteSetting.privacy_topic_id > 0 && Topic.exists?(id: SiteSetting.privacy_topic_id)
|
|
||||||
"#{Discourse.base_path}/privacy"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def include_privacy_policy_url?
|
def include_privacy_policy_url?
|
||||||
|
|
|
@ -16,17 +16,17 @@
|
||||||
<a href='<%= path "/guidelines" %>' itemprop="url"><%= t 'guidelines_topic.title' %> </a>
|
<a href='<%= path "/guidelines" %>' itemprop="url"><%= t 'guidelines_topic.title' %> </a>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<% if path = tos_path.presence %>
|
<% if tos_url.present? %>
|
||||||
<li itemscope itemtype='http://schema.org/SiteNavigationElement'>
|
<li itemscope itemtype='http://schema.org/SiteNavigationElement'>
|
||||||
<span itemprop='name'>
|
<span itemprop='name'>
|
||||||
<a href='<%= path %>' itemprop="url"><%= t 'tos_topic.title' %> </a>
|
<a href='<%= tos_url %>' itemprop="url"><%= t 'tos_topic.title' %> </a>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if path = privacy_path.presence %>
|
<% if privacy_policy_url.present? %>
|
||||||
<li itemscope itemtype='http://schema.org/SiteNavigationElement'>
|
<li itemscope itemtype='http://schema.org/SiteNavigationElement'>
|
||||||
<span itemprop='name'>
|
<span itemprop='name'>
|
||||||
<a href='<%= path %>' itemprop="url"><%= t 'privacy_topic.title' %> </a>
|
<a href='<%= privacy_policy_url %>' itemprop="url"><%= t 'privacy_topic.title' %> </a>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -10,11 +10,11 @@
|
||||||
<li class='nav-item-faq'><a class='<%= @page == 'faq' ? 'active' : '' %>' href='<%=faq_path%>'><%= t 'js.faq' %></a></li>
|
<li class='nav-item-faq'><a class='<%= @page == 'faq' ? 'active' : '' %>' href='<%=faq_path%>'><%= t 'js.faq' %></a></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if path = tos_path.presence %>
|
<% if tos_url.present? %>
|
||||||
<li class='nav-item-tos'><a href='<%= path %>' class='<%= @page == 'tos' ? 'active' : '' %>'><%= t 'js.tos' %></a></li>
|
<li class='nav-item-tos'><a href='<%= tos_url %>' class='<%= @page == 'tos' ? 'active' : '' %>'><%= t 'js.tos' %></a></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if path = privacy_path.presence %>
|
<% if privacy_policy_url.present? %>
|
||||||
<li class='nav-item-privacy'><a href='<%= path %>' class='<%= @page == 'privacy' ? 'active' : '' %>'><%= t 'js.privacy' %></a></li>
|
<li class='nav-item-privacy'><a href='<%= privacy_policy_url %>' class='<%= @page == 'privacy' ? 'active' : '' %>'><%= t 'js.privacy' %></a></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,8 @@ DiscourseEvent.on(:site_setting_changed) do |name, old_value, new_value|
|
||||||
|
|
||||||
Emoji.clear_cache && Discourse.request_refresh! if name == :emoji_deny_list
|
Emoji.clear_cache && Discourse.request_refresh! if name == :emoji_deny_list
|
||||||
|
|
||||||
|
Discourse.clear_urls! if %i[tos_topic_id privacy_topic_id].include?(name)
|
||||||
|
|
||||||
# Update seeded topics
|
# Update seeded topics
|
||||||
if %i[title site_description].include?(name)
|
if %i[title site_description].include?(name)
|
||||||
topics = SeedData::Topics.with_default_locale
|
topics = SeedData::Topics.with_default_locale
|
||||||
|
|
|
@ -5,19 +5,11 @@ module ConfigurableUrls
|
||||||
SiteSetting.faq_url.blank? ? "#{Discourse.base_path}/faq" : SiteSetting.faq_url
|
SiteSetting.faq_url.blank? ? "#{Discourse.base_path}/faq" : SiteSetting.faq_url
|
||||||
end
|
end
|
||||||
|
|
||||||
def tos_path
|
def tos_url
|
||||||
if SiteSetting.tos_url.present?
|
Discourse.tos_url
|
||||||
SiteSetting.tos_url
|
|
||||||
elsif SiteSetting.tos_topic_id > 0 && Topic.exists?(id: SiteSetting.tos_topic_id)
|
|
||||||
"#{Discourse.base_path}/tos"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def privacy_path
|
def privacy_policy_url
|
||||||
if SiteSetting.privacy_policy_url.present?
|
Discourse.privacy_policy_url
|
||||||
SiteSetting.privacy_policy_url
|
|
||||||
elsif SiteSetting.privacy_topic_id > 0 && Topic.exists?(id: SiteSetting.privacy_topic_id)
|
|
||||||
"#{Discourse.base_path}/privacy"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -597,6 +597,46 @@ module Discourse
|
||||||
alias_method :base_url_no_path, :base_url_no_prefix
|
alias_method :base_url_no_path, :base_url_no_prefix
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.urls_cache
|
||||||
|
@urls_cache ||= DistributedCache.new("urls_cache")
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.tos_url
|
||||||
|
if SiteSetting.tos_url.present?
|
||||||
|
SiteSetting.tos_url
|
||||||
|
else
|
||||||
|
urls_cache["tos"] ||= (
|
||||||
|
if SiteSetting.tos_topic_id > 0 && Topic.exists?(id: SiteSetting.tos_topic_id)
|
||||||
|
"#{Discourse.base_path}/tos"
|
||||||
|
else
|
||||||
|
:nil
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
urls_cache["tos"] != :nil ? urls_cache["tos"] : nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.privacy_policy_url
|
||||||
|
if SiteSetting.privacy_policy_url.present?
|
||||||
|
SiteSetting.privacy_policy_url
|
||||||
|
else
|
||||||
|
urls_cache["privacy_policy"] ||= (
|
||||||
|
if SiteSetting.privacy_topic_id > 0 && Topic.exists?(id: SiteSetting.privacy_topic_id)
|
||||||
|
"#{Discourse.base_path}/privacy"
|
||||||
|
else
|
||||||
|
:nil
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
urls_cache["privacy_policy"] != :nil ? urls_cache["privacy_policy"] : nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.clear_urls!
|
||||||
|
urls_cache.clear
|
||||||
|
end
|
||||||
|
|
||||||
LAST_POSTGRES_READONLY_KEY = "postgres:last_readonly"
|
LAST_POSTGRES_READONLY_KEY = "postgres:last_readonly"
|
||||||
|
|
||||||
READONLY_MODE_KEY_TTL ||= 60
|
READONLY_MODE_KEY_TTL ||= 60
|
||||||
|
|
|
@ -90,6 +90,9 @@ class PostDestroyer
|
||||||
UserActionManager.topic_destroyed(@topic)
|
UserActionManager.topic_destroyed(@topic)
|
||||||
DiscourseEvent.trigger(:topic_destroyed, @topic, @user)
|
DiscourseEvent.trigger(:topic_destroyed, @topic, @user)
|
||||||
WebHook.enqueue_topic_hooks(:topic_destroyed, @topic, topic_payload) if has_topic_web_hooks
|
WebHook.enqueue_topic_hooks(:topic_destroyed, @topic, topic_payload) if has_topic_web_hooks
|
||||||
|
if SiteSetting.tos_topic_id == @topic.id || SiteSetting.privacy_topic_id == @topic.id
|
||||||
|
Discourse.clear_urls!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -122,6 +125,9 @@ class PostDestroyer
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
update_imap_sync(@post, false)
|
update_imap_sync(@post, false)
|
||||||
|
if SiteSetting.tos_topic_id == @topic.id || SiteSetting.privacy_topic_id == @topic.id
|
||||||
|
Discourse.clear_urls!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user