Executing query multiple time doesn't change the perf.
But after trying different optimization, I found one which doesn't change the code a lot and works well.
To retrive the concatenated value in the xml string, I replace the .value('.', 'nvarchar(max)')
by .value('.[1]', 'nvarchar(max)')
for all queries (in the views and in the final select)
With this new code, the execution time is as instantaneous for SQL 2012 as for SQL 2016 🙂