实例分析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也是能够传参的。

相关文章
相关标签/搜索