Skip to content

Commit fc96caf

Browse files
authored
Merge pull request #316 from frappe/render_perf
perf: speed up wiki page rendering
2 parents d9c9ef6 + b76cad4 commit fc96caf

File tree

2 files changed

+21
-29
lines changed

2 files changed

+21
-29
lines changed

wiki/wiki/doctype/wiki_page/wiki_page.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,11 @@ def get_context(self, context):
205205

206206
wiki_settings = frappe.get_single("Wiki Settings")
207207
wiki_space_name = frappe.get_value("Wiki Group Item", {"wiki_page": self.name}, "parent")
208-
wiki_space = frappe.get_doc("Wiki Space", wiki_space_name) if wiki_space_name else frappe._dict()
208+
wiki_space = (
209+
frappe.get_cached_doc("Wiki Space", wiki_space_name) if wiki_space_name else frappe._dict()
210+
)
209211

210-
context.no_cache = 1
212+
context.no_cache = 0 # Changes will invalidate HTML cache
211213
context.navbar_search = wiki_settings.add_search_bar
212214
context.light_mode_logo = wiki_space.light_mode_logo or wiki_settings.logo
213215
context.dark_mode_logo = wiki_space.dark_mode_logo or wiki_settings.dark_mode_logo
@@ -303,7 +305,7 @@ def get_sidebar_items(self):
303305
if sidebar_item.hide_on_sidebar:
304306
continue
305307

306-
wiki_page = frappe.get_doc("Wiki Page", sidebar_item.wiki_page)
308+
wiki_page = frappe.get_cached_doc("Wiki Page", sidebar_item.wiki_page)
307309

308310
permitted = wiki_page.allow_guest or frappe.session.user != "Guest"
309311
if not permitted:
@@ -545,7 +547,7 @@ def get_source(resolved_route, jenv):
545547

546548
@frappe.whitelist(allow_guest=True)
547549
def get_sidebar_for_page(wiki_page):
548-
sidebar = frappe.get_doc("Wiki Page", wiki_page).get_sidebar_items()
550+
sidebar = frappe.get_cached_doc("Wiki Page", wiki_page).get_sidebar_items()
549551
return sidebar
550552

551553

wiki/wiki/doctype/wiki_page/wiki_renderer.py

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import frappe
55
from frappe.website.page_renderers.document_page import DocumentPage
6-
from frappe.website.router import get_doctypes_with_web_view
76
from frappe.website.utils import build_response
87

98
from wiki.wiki.doctype.wiki_page.wiki_page import get_sidebar_for_page
@@ -13,31 +12,22 @@
1312

1413
class WikiPageRenderer(DocumentPage):
1514
def can_render(self):
16-
if wiki_space_name := frappe.get_value("Wiki Space", {"route": self.path}):
17-
wiki_space = frappe.get_doc("Wiki Space", wiki_space_name)
18-
topmost_wiki_route = frappe.get_value("Wiki Page", wiki_space.wiki_sidebars[0].wiki_page, "route")
15+
doctype = "Wiki Page"
16+
try:
17+
self.docname = frappe.db.get_value(doctype, {"route": self.path, "published": 1}, "name")
18+
if self.docname:
19+
self.doctype = doctype
20+
return True
21+
except Exception as e:
22+
if not frappe.db.is_missing_column(e):
23+
raise e
24+
25+
if wiki_space_name := frappe.db.get_value("Wiki Space", {"route": self.path}):
26+
wiki_space = frappe.get_cached_doc("Wiki Space", wiki_space_name)
27+
topmost_wiki_route = frappe.db.get_value(
28+
"Wiki Page", wiki_space.wiki_sidebars[0].wiki_page, "route"
29+
)
1930
frappe.redirect(f"/{quote(topmost_wiki_route)}")
20-
return self.search_in_doctypes_with_web_view()
21-
22-
def search_in_doctypes_with_web_view(self):
23-
for doctype in get_doctypes_with_web_view():
24-
if doctype != "Wiki Page":
25-
continue
26-
filters = dict(route=self.path)
27-
meta = frappe.get_meta(doctype)
28-
condition_field = self.get_condition_field(meta)
29-
30-
if condition_field:
31-
filters[condition_field] = 1
32-
33-
try:
34-
self.docname = frappe.db.get_value(doctype, filters, "name")
35-
if self.docname:
36-
self.doctype = doctype
37-
return True
38-
except Exception as e:
39-
if not frappe.db.is_missing_column(e):
40-
raise e
4131

4232
def render(self):
4333
html = self.get_html()

0 commit comments

Comments
 (0)