實例分析Vue.js中 computed和methods不一樣機制

在vue.js中,有methods和computed兩種方式來動態看成方法來用的javascript

1.首先最明顯的不一樣 就是調用的時候,methods要加上()css

2.咱們可使用 methods 來替代 computed,效果上兩個都是同樣的,可是 computed 是基於它的依賴緩存,只有相關依賴發生改變時纔會從新取值html

而使用 methods ,在從新渲染的時候,函數總會從新調用執行vue

 

爲了方便理解,先上一段源碼java

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>title</title>
        <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
    </head>

    <body>
        <div class="test">    <!--computed計算屬性-->
            <p>{{now}}</p>
            <p>{{now}}</p>
            <p>{{now}}</p>
            <p>{{now}}</p>
            <hr /> <!--橫線分割-->
</div>
        <div class="test2"> <!--methods方法,注意new()加了括號-->
            <p>{{now()}}</p>
            <p>{{now()}}</p>
            <p>{{now()}}</p>
            <p>{{now()}}</p>
        </div>
    </body>

    <script type="text/javascript">
        var myVue = new Vue({ el: ".test", computed: { now: function() { var yanshi = 0; for(var o = 0; o < 2000; o++) { //延時 for(var q = 0; q < 2000; q++) { yanshi++; } } return Date.now() } } }); var vue2 = new Vue({ el: '.test2', methods: { now: function() { var yanshi = 0; for(var o = 0; o < 2000; o++) { for(var q = 0; q < 2000; q++) { yanshi++; } } return Date.now() } } }) </script>

</html>

 

運行結果如上,能夠看出computed計算屬性的話,每次進入頁面將一直沿用第一次的信息,不會再觸發now,這就是依賴緩存。(有延時的狀況下 屢次輸出時間相同)緩存

那什麼是相關依賴發生改變時纔會從新取值呢 比方說reversedMessage function()計算屬性中調用了message變量函數

就意味着只要 message 尚未發生改變,屢次訪問 reversedMessage 計算屬性會當即返回以前的計算結果,而沒必要再次執行函數。性能

 

methods是實時的,在從新渲染時,函數總會從新調用執行,不會緩存,(屢次輸出時間不一樣)spa

 

能夠說使用 computed 性能會更好,可是若是你不但願緩存,你可使用 methods 屬性。code

computed 屬性默認只有 getter ,不過在須要時你也能夠提供一個 setter :因此其實computed也是能夠傳參的。

相關文章
相關標籤/搜索