From 2c911fe176071cf6412f100e8d202945774d8649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20=28avd=29?= Date: Tue, 7 Dec 2021 17:27:52 +0000 Subject: [PATCH] [FIX] web: speedup basic_model._updateRecordsData Speedup basic_model._updateRecordsData for many2many fields such as fetchmail.server.message_ids and mail_channel.channel_message_ids. Calling _.findWhere(values) inside two nested _.each calls can be quite slow when the number of values is big. Remove the call to _.findWhere by first creating a Map res_id -> data and then calling Map.get to retrieve the data for a given res_id when making a DataPoint opw-2701170 closes odoo/odoo#82540 X-original-commit: aaf653e744c846d4c399498ea38e358ddee80d4a Signed-off-by: Aaron Bohy (aab) --- addons/web/static/src/legacy/js/views/basic/basic_model.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/legacy/js/views/basic/basic_model.js b/addons/web/static/src/legacy/js/views/basic/basic_model.js index 9187e6a965d..91e89c9f30f 100644 --- a/addons/web/static/src/legacy/js/views/basic/basic_model.js +++ b/addons/web/static/src/legacy/js/views/basic/basic_model.js @@ -5211,6 +5211,7 @@ var BasicModel = AbstractModel.extend({ var fieldsInfo = view ? view.fieldsInfo : fieldInfo.fieldsInfo; var fields = view ? view.fields : fieldInfo.relatedFields; var viewType = view ? view.type : fieldInfo.viewType; + var id2Values = new Map(values.map((value) => [value.id, value])) _.each(records, function (record) { var x2mList = self.localData[record.data[fieldName]]; @@ -5218,7 +5219,7 @@ var BasicModel = AbstractModel.extend({ _.each(x2mList.res_ids, function (res_id) { var dataPoint = self._makeDataPoint({ modelName: field.relation, - data: _.findWhere(values, {id: res_id}), + data: id2Values.get(res_id), fields: fields, fieldsInfo: fieldsInfo, parentID: x2mList.id,