Skip to content

Commit

Permalink
Merge pull request #316 from frappe/render_perf
Browse files Browse the repository at this point in the history
perf: speed up wiki page rendering
  • Loading branch information
ankush authored Jan 15, 2025
2 parents d9c9ef6 + b76cad4 commit fc96caf
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 29 deletions.
10 changes: 6 additions & 4 deletions wiki/wiki/doctype/wiki_page/wiki_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,9 +205,11 @@ def get_context(self, context):

wiki_settings = frappe.get_single("Wiki Settings")
wiki_space_name = frappe.get_value("Wiki Group Item", {"wiki_page": self.name}, "parent")
wiki_space = frappe.get_doc("Wiki Space", wiki_space_name) if wiki_space_name else frappe._dict()
wiki_space = (
frappe.get_cached_doc("Wiki Space", wiki_space_name) if wiki_space_name else frappe._dict()
)

context.no_cache = 1
context.no_cache = 0 # Changes will invalidate HTML cache
context.navbar_search = wiki_settings.add_search_bar
context.light_mode_logo = wiki_space.light_mode_logo or wiki_settings.logo
context.dark_mode_logo = wiki_space.dark_mode_logo or wiki_settings.dark_mode_logo
Expand Down Expand Up @@ -303,7 +305,7 @@ def get_sidebar_items(self):
if sidebar_item.hide_on_sidebar:
continue

wiki_page = frappe.get_doc("Wiki Page", sidebar_item.wiki_page)
wiki_page = frappe.get_cached_doc("Wiki Page", sidebar_item.wiki_page)

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

@frappe.whitelist(allow_guest=True)
def get_sidebar_for_page(wiki_page):
sidebar = frappe.get_doc("Wiki Page", wiki_page).get_sidebar_items()
sidebar = frappe.get_cached_doc("Wiki Page", wiki_page).get_sidebar_items()
return sidebar


Expand Down
40 changes: 15 additions & 25 deletions wiki/wiki/doctype/wiki_page/wiki_renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

import frappe
from frappe.website.page_renderers.document_page import DocumentPage
from frappe.website.router import get_doctypes_with_web_view
from frappe.website.utils import build_response

from wiki.wiki.doctype.wiki_page.wiki_page import get_sidebar_for_page
Expand All @@ -13,31 +12,22 @@

class WikiPageRenderer(DocumentPage):
def can_render(self):
if wiki_space_name := frappe.get_value("Wiki Space", {"route": self.path}):
wiki_space = frappe.get_doc("Wiki Space", wiki_space_name)
topmost_wiki_route = frappe.get_value("Wiki Page", wiki_space.wiki_sidebars[0].wiki_page, "route")
doctype = "Wiki Page"
try:
self.docname = frappe.db.get_value(doctype, {"route": self.path, "published": 1}, "name")
if self.docname:
self.doctype = doctype
return True
except Exception as e:
if not frappe.db.is_missing_column(e):
raise e

if wiki_space_name := frappe.db.get_value("Wiki Space", {"route": self.path}):
wiki_space = frappe.get_cached_doc("Wiki Space", wiki_space_name)
topmost_wiki_route = frappe.db.get_value(
"Wiki Page", wiki_space.wiki_sidebars[0].wiki_page, "route"
)
frappe.redirect(f"/{quote(topmost_wiki_route)}")
return self.search_in_doctypes_with_web_view()

def search_in_doctypes_with_web_view(self):
for doctype in get_doctypes_with_web_view():
if doctype != "Wiki Page":
continue
filters = dict(route=self.path)
meta = frappe.get_meta(doctype)
condition_field = self.get_condition_field(meta)

if condition_field:
filters[condition_field] = 1

try:
self.docname = frappe.db.get_value(doctype, filters, "name")
if self.docname:
self.doctype = doctype
return True
except Exception as e:
if not frappe.db.is_missing_column(e):
raise e

def render(self):
html = self.get_html()
Expand Down

0 comments on commit fc96caf

Please sign in to comment.