From 28b9a6490c7f3b7bb3b347091de0f4ebe359268a Mon Sep 17 00:00:00 2001 From: Romain Derie Date: Mon, 21 Feb 2022 23:05:56 +0000 Subject: [PATCH] [IMP] website: don't query website table when serving homepage We can easily avoid a read on the website table when serving the homepage by simply caching the website.homepage_id value and then browsing the record (no query needed) instead of reading it on the website record. While this code is not really elegant, it seems like a good tradeoff to gain a query on this particular homepage serve controller, which is the main entry point of a website and generally the page the more often served. task-2774979 X-original-commit: 69b443b85656c895c66a1f83b235f5d1e53727d4 Part-of: odoo/odoo#85456 --- addons/website/controllers/main.py | 3 ++- addons/website/models/website.py | 1 + addons/website/tests/test_performance.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 961b1b58c3e..2b43c82f817 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -73,7 +73,8 @@ class Website(Home): # prefetch all menus (it will prefetch website.page too) top_menu = request.website.menu_id - homepage = request.website.homepage_id + homepage_id = request.website._get_cached('homepage_id') + homepage = homepage_id and request.env['website.page'].browse(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) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 09b28fb4f79..da0ac5d86b1 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -1350,6 +1350,7 @@ class Website(models.Model): 'user_id': self.user_id.id, 'company_id': self.company_id.id, 'default_lang_id': self.default_lang_id.id, + 'homepage_id': self.homepage_id.id, } def _get_cached(self, field): diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py index b78caab7cee..47cc12c7711 100644 --- a/addons/website/tests/test_performance.py +++ b/addons/website/tests/test_performance.py @@ -109,7 +109,7 @@ class TestWebsitePerformance(UtilPerf): def test_20_perf_sql_queries_homepage(self): # homepage "/" has its own controller - self.assertEqual(self._get_url_hot_query('/'), 13) + self.assertEqual(self._get_url_hot_query('/'), 12) self.assertEqual(self._get_url_hot_query('/', cache=False), 15) def test_30_perf_sql_queries_page_no_layout(self):