From 0ff3e6fd4c4943069d85fca003a05232d4581048 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 14 Jan 2025 19:19:02 +0530 Subject: [PATCH] perf: cache meta tags existence --- .../doctype/website_route_meta/website_route_meta.py | 6 ++++++ frappe/website/website_components/metatags.py | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/frappe/website/doctype/website_route_meta/website_route_meta.py b/frappe/website/doctype/website_route_meta/website_route_meta.py index 9164196b13..0846ec130f 100644 --- a/frappe/website/doctype/website_route_meta/website_route_meta.py +++ b/frappe/website/doctype/website_route_meta/website_route_meta.py @@ -20,3 +20,9 @@ class WebsiteRouteMeta(Document): def autoname(self): if self.name and self.name.startswith("/"): self.name = self.name[1:] + + def clear_cache(self): + from frappe.website.website_components.metatags import has_meta_tags + + has_meta_tags.clear_cache() + return super().clear_cache() diff --git a/frappe/website/website_components/metatags.py b/frappe/website/website_components/metatags.py index 3d35be5514..7708a5d42e 100644 --- a/frappe/website/website_components/metatags.py +++ b/frappe/website/website_components/metatags.py @@ -1,4 +1,5 @@ import frappe +from frappe.utils.caching import site_cache METATAGS = ("title", "description", "image", "author", "published_on") @@ -58,14 +59,17 @@ class MetaTags: route = self.path if route == "": # homepage - route = frappe.db.get_single_value("Website Settings", "home_page") + route = frappe.get_website_settings("home_page") - route_exists = ( - route and not route.endswith((".js", ".css")) and frappe.db.exists("Website Route Meta", route) - ) + route_exists = route and not route.endswith((".js", ".css")) and has_meta_tags(route) if route_exists: website_route_meta = frappe.get_doc("Website Route Meta", route) for meta_tag in website_route_meta.meta_tags: d = meta_tag.get_meta_dict() self.tags.update(d) + + +@site_cache(ttl=10 * 60, maxsize=16) +def has_meta_tags(route): + return bool(frappe.db.exists("Website Route Meta", route))