In the following example, using the computed property of vue3, should we put "computed" in the outermost layer or do "computed" on the data alone? Which performs better?
const arr = computed(()=>[
{options:cpuData.map((item)=>({...item,name:'tom'}))},
{options:disData.map((item)=>({...item,name:'jerry'}))},
{options:memoryData.map((item)=>({...item,name:'oh'}))},
{options:testData.map((item)=>({...item,name:'test'}))},
{options:[{name:'test'},{name:'test2'}]},
{options:[{name:'test'},{name:'test2'}]},
{options:[{name:'test'},{name:'test2'}]},
{options:[{name:'test'},{name:'test2'}]},
])
const arr = [
{options:computed(()=>cpuData.map((item)=>({...item,name:'tom'}))),
{options:computed(()=>disData.map((item)=>({...item,name:'tom'}))),
{options:computed(()=>memoryData.map((item)=>({...item,name:'tom'}))),
{options:computed(()=>testData.map((item)=>({...item,name:'tom'}))),
{options:[{name:'test'},{name:'test2'}]},
{options:[{name:'test'},{name:'test2'}]},
{options:[{name:'test'},{name:'test2'}]},
{options:[{name:'test'},{name:'test2'}]},
]
CodePudding user response:
The second approach should be more performant.
Let's assume something has changed in the cpuData
- In the first case, it will trigger the whole computed property to recompute. Which means
disData.map,memoryData.mapandtestData.mapwill be executed again, even though nothing had changed there. - It the second case, only the first computed property (containing
cpuData.map) will be recomputed, removing these unnecessary additional calculations.
Also there are some other reasons to pick the second approach, described in Vue style guide
