[IMP] core: remove useless mapped call when calling filtered with a str
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 <ryv@odoo.com>
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user