diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 8019abba5c4..df2bf628660 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -68,6 +68,9 @@ class Website(Home): @http.route('/', type='http', auth="public", website=True, sitemap=True) def index(self, **kw): + # prefetch all menus (it will prefetch website.page too) + top_menu = request.website.menu_id + homepage = request.website.homepage_id if homepage and (homepage.sudo().is_visible or request.env.user.has_group('base.group_user')) and homepage.url != '/': return request.env['ir.http'].reroute(homepage.url) @@ -76,7 +79,6 @@ class Website(Home): if website_page: return website_page else: - top_menu = request.website.menu_id first_menu = top_menu and top_menu.child_id and top_menu.child_id.filtered(lambda menu: menu.is_visible) if first_menu and first_menu[0].url not in ('/', '', '#') and (not (first_menu[0].url.startswith(('/?', '/#', ' ')))): return request.redirect(first_menu[0].url) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 80ec1d9f0c7..c850a3a4e0b 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -239,6 +239,9 @@ class Http(models.AbstractModel): published_domain = page_domain # specific page first page = request.env['website.page'].sudo().search(published_domain, order='website_id asc', limit=1) + if page: + # prefetch all menus (it will prefetch website.page too) + request.website.menu_id if page and (request.website.is_publisher() or page.is_visible): _, ext = os.path.splitext(req_page) return request.render(page.get_view_identifier(), { diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py index c257de62b88..92e1616f29a 100644 --- a/addons/website/tests/test_performance.py +++ b/addons/website/tests/test_performance.py @@ -77,25 +77,25 @@ class TestWebsitePerformance(UtilPerf): def test_10_perf_sql_queries_page(self): # standard untracked website.page - self.assertEqual(self._get_url_hot_query(self.page.url), 14) + self.assertEqual(self._get_url_hot_query(self.page.url), 12) self.menu.unlink() self.assertEqual(self._get_url_hot_query(self.page.url), 14) def test_15_perf_sql_queries_page(self): # standard tracked website.page self.page.track = True - self.assertEqual(self._get_url_hot_query(self.page.url), 22) + self.assertEqual(self._get_url_hot_query(self.page.url), 20) self.menu.unlink() self.assertEqual(self._get_url_hot_query(self.page.url), 22) def test_20_perf_sql_queries_homepage(self): # homepage "/" has its own controller - self.assertEqual(self._get_url_hot_query('/'), 21) + self.assertEqual(self._get_url_hot_query('/'), 19) def test_30_perf_sql_queries_page_no_layout(self): # website.page with no call to layout templates self.page.arch = '