From 382d6924b8a2b8ac9564a9bfd2c398423813ef04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A0n=20Todorovich?= Date: Tue, 8 Nov 2022 14:55:08 +0000 Subject: [PATCH] [IMP] core: remove useless mapped call when calling filtered with a str MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mapped call is supposed to populate the cache, but that's already taking care of by prefetching. It ends up adding an overhead instead. The perf improvement is more noticeable on large recordsets. For example, on a database populated with 100k res.partner records. Before: .. code-block:: python partners = env["res.partner"].search([]) partners.filtered("name") # warm up timeit.timeit(lambda: partners.filtered("name"), number=10) # result: 7.15 After: .. code-block:: python partners = env["res.partner"].search([]) partners.filtered("name") # warm up timeit.timeit(lambda: partners.filtered("name"), number=10) # result: 4.67 closes odoo/odoo#105350 Signed-off-by: Rémy Voet --- odoo/models.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/odoo/models.py b/odoo/models.py index 006e72b89bb..5e316157ab6 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -5382,8 +5382,6 @@ class BaseModel(metaclass=MetaModel): if isinstance(func, str): name = func func = lambda rec: any(rec.mapped(name)) - # populate cache - self.mapped(name) return self.browse([rec.id for rec in self if func(rec)]) def grouped(self, key):