1. 代碼示例:vue
<template> <div id="app"> <input type="text" v-model="firstName"> <input type="text" v-model="lastName"> <input type="text" v-model="age"> <br><br> 計算屬性: {{name}} <br><br> 調用方法: {{getName()}} </div> </template> <script> export default { data () { return { firstName: 'Samantha', lastName: 'Carter', age: 25 } }, methods: { getName () { console.log('name changed') return `${this.firstName} ${this.lastName}` } }, computed: { name () { console.log('getName invoked') return `${this.firstName} ${this.lastName}` } } } </script>
2. 執行結果
(1) 初始結果緩存
(2) firstName或lastName改變以後的執行結果app
(3) age改變以後的執行結果性能
3. 分析結論this
在使用vue進行開發的過程當中,常常會遇到computed動態計算屬性值的場景,使用{{}}調用方法(getName)能達到一樣的目的,但效率不及computed,緣由在於每當綁定在this上的值發生變化時,都會調用一次方法,而computed會緩存計算結果,只有當其依賴的屬性值發生變化時纔會從新計算,所以纔會出現圖三的狀況,當年齡發生變化時,getName()方法被調用以輸入"getName invoked",而name所依賴的firstName和lastName都沒有發生變化,因此name沒有從新計算,因而可知,computed的性能是要比方法調用高不少的。