From 26c4de2f18be2b4e944ee255236d9a5a1710d94c Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Thu, 26 Mar 2020 18:07:20 +0000 Subject: [PATCH] [IMP] http_routing: use cached code from lang In case of short controller that don't use qweb template, we don't need anyhting else that this url code that don't change frequently. It make only sense for model like lang, website, ... that will not change frequently. And are called on each call by the dispatcher. In case of a website page, we will btw browse lang later, but in case of small controller like /favicon.ico, or page without qweb, ... we can just use the same from last query. --- addons/http_routing/models/ir_http.py | 2 +- addons/website/tests/test_performance.py | 2 +- odoo/addons/base/models/res_lang.py | 13 +++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index 5469310228f..c0fd4a46a19 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -411,7 +411,7 @@ class IrHttp(models.AbstractModel): lang = preferred_lang or cls._get_default_lang() request.lang = lang - context['lang'] = lang.code + context['lang'] = lang._get_cached('code') # bind modified context request.context = context diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py index 0cbc7ce214d..2e02135116a 100644 --- a/addons/website/tests/test_performance.py +++ b/addons/website/tests/test_performance.py @@ -95,7 +95,7 @@ class TestWebsitePerformance(UtilPerf): def test_30_perf_sql_queries_page_no_layout(self): # website.page with no call to layout templates self.page.arch = '
I am a blank page
' - self.assertEqual(self._get_url_hot_query(self.page.url), 10) + self.assertEqual(self._get_url_hot_query(self.page.url), 9) def test_40_perf_sql_queries_page_multi_level_menu(self): # menu structure should not impact SQL requests diff --git a/odoo/addons/base/models/res_lang.py b/odoo/addons/base/models/res_lang.py index 0b58daf5411..dcf901e1a22 100644 --- a/odoo/addons/base/models/res_lang.py +++ b/odoo/addons/base/models/res_lang.py @@ -213,6 +213,19 @@ class Lang(models.Model): langs = self.with_context(active_test=False).search([]) return sorted([(lang.code, lang.url_code, lang.name) for lang in langs], key=itemgetter(2)) + @tools.ormcache('self.id') + def _get_cached_values(self): + self.ensure_one() + return { + 'id': self.id, + 'code': self.code, + 'url_code': self.url_code, + 'name': self.name, + } + + def _get_cached(self, field): + return self._get_cached_values()[field] + @api.model @tools.ormcache('code') def _lang_code_to_urlcode(self, code):