美文网首页前端
VUE 计算属性缓存 vs 方法

VUE 计算属性缓存 vs 方法

作者: 若年 | 来源:发表于2019-03-05 11:44 被阅读0次

    在vue中,对于复杂逻辑,我们可以使用计算属性和方法来进行处理。如:

    利用计算属性来实现:
    <div id="example">
      <p>Original message: "{{ message }}"</p>
      <p>Computed reversed message: "{{ reversedMessage }}"</p>
    </div>
    
    var vm = new Vue({
      el: '#example',
      data: {
        message: 'Hello'
      },
      computed: {
        // 计算属性的 getter
        reversedMessage: function () {
          // `this` 指向 vm 实例
          return this.message.split('').reverse().join('')
        }
      }
    })
    

    执行结果:
    Original message: "Hello"

    Computed reversed message: "olleH"

    利用方法来实现:
    <p>Reversed message: "{{ reversedMessage() }}"</p>
    
    // 在组件中
    methods: {
      reversedMessage: function () {
        return this.message.split('').reverse().join('')
      }
    }
    

    两种方式的最终结果确实是完全相同的.

    不同的是计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

    相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。

    我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。

    相关文章

      网友评论

        本文标题:VUE 计算属性缓存 vs 方法

        本文链接:https://www.haomeiwen.com/subject/posnuqtx.html