vue計算屬性與方法調用性能對比

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) 初始結果緩存

clipboard.png

(2) firstName或lastName改變以後的執行結果app

clipboard.png

(3) age改變以後的執行結果性能

clipboard.png

3. 分析結論this

在使用vue進行開發的過程當中,常常會遇到computed動態計算屬性值的場景,使用{{}}調用方法(getName)能達到一樣的目的,但效率不及computed,緣由在於每當綁定在this上的值發生變化時,都會調用一次方法,而computed會緩存計算結果,只有當其依賴的屬性值發生變化時纔會從新計算,所以纔會出現圖三的狀況,當年齡發生變化時,getName()方法被調用以輸入"getName invoked",而name所依賴的firstName和lastName都沒有發生變化,因此name沒有從新計算,因而可知,computed的性能是要比方法調用高不少的。
相關文章
相關標籤/搜索