从 Vue 方法内部多次调用 computed 属性 是否影响性能?
Is calling computed property from inside Vue method multiple times affecting the performance?
关于计算属性和性能,我在构建用 Vue 编写的代码时遇到问题。我想使用计算属性 - 不违反 DRY 规则 - 但我担心它可能会影响性能。
我需要解决一个 UI 问题,它主要与 div 身高有关。
所以我通过访问 $refs:
来获取高度值
var divHeight = this.$refs.divRef.clientHeight;
然后我必须在我的组件方法中多次使用 divHeight。
基本上我现在有三个选择。看看这个片段,看看我的意思:
CodePen.
解决此问题的最佳方法是什么?
首先,我想提一下,无论您最终使用哪种方法,都不太可能产生显着的性能提升。如果性能是您最关心的问题,那么您应该分析您的网页以确定哪种方法最有效。大多数时候我更喜欢代码 readability/maintainability 而不是性能。
1.没有计算属性,在每个方法中单独声明divHeight
。
methods: {
firstMethod() {
var divHeight = this.$refs.divRef.clientHeight;
...
},
secondMethod() {
var divHeight = this.$refs.divRef.clientHeight;
...
}
}
如果 div 的高度可以改变,这是更好的选择,因此您确实希望每次调用方法时都获取正确的高度,以防高度改变。
2。使 divHeight
计算 属性,无论如何将其声明为方法内的变量。
computed: {
divHeight() {
return this.$refs.divRef.clientHeight;
}
},
methods: {
firstMethod() {
var divHeight = this.divHeight;
...
},
secondMethod() {
var divHeight = this.divHeight;
...
}
}
divHeight
只会计算一次,第一次访问 属性 时。如果 div 的高度发生变化,则不会重新计算 divHeight
。此解决方案不适合这种情况,因为计算属性通常在 属性 依赖于该组件的其他可观察数据属性(Vue 无法观察到 this.$refs.divRef.clientHeight
)时使用。
3。使 divHeight
计算 属性,在一个方法内多次使用 this.divHeight
。
computed: {
divHeight() {
return this.$refs.divRef.clientHeight;
}
},
methods: {
firstMethod() {
this.divHeight/this.divWidth = something;
this.divHeight... other operations.
},
secondMethod() {
this.divHeight/this.divWidth = something;
this.divHeight... other operations.
}
}
除了您在每个方法中多次访问 this.divHeight
之外,这与 #2 相同。唯一超过 #2 的 "improvement" 是避免 属性 访问,这是可以忽略不计的;但是如果你在一个方法中使用 this.divHeight
多次 那么也许#2 最好避免在任何地方使用 this.
。
我建议改为:
methods: {
divHeight() {
return this.$refs.divRef.clientHeight;
},
firstMethod() {
var divHeight = this.divHeight();
...
},
secondMethod() {
var divHeight = this.divHeight();
...
}
}
这与#1 基本相同,只是它更短一些,因为您不必在所有地方都键入 this.$refs.divRef.clientHeight
。
关于计算属性和性能,我在构建用 Vue 编写的代码时遇到问题。我想使用计算属性 - 不违反 DRY 规则 - 但我担心它可能会影响性能。
我需要解决一个 UI 问题,它主要与 div 身高有关。 所以我通过访问 $refs:
来获取高度值var divHeight = this.$refs.divRef.clientHeight;
然后我必须在我的组件方法中多次使用 divHeight。
基本上我现在有三个选择。看看这个片段,看看我的意思: CodePen.
解决此问题的最佳方法是什么?
首先,我想提一下,无论您最终使用哪种方法,都不太可能产生显着的性能提升。如果性能是您最关心的问题,那么您应该分析您的网页以确定哪种方法最有效。大多数时候我更喜欢代码 readability/maintainability 而不是性能。
1.没有计算属性,在每个方法中单独声明divHeight
。
methods: {
firstMethod() {
var divHeight = this.$refs.divRef.clientHeight;
...
},
secondMethod() {
var divHeight = this.$refs.divRef.clientHeight;
...
}
}
如果 div 的高度可以改变,这是更好的选择,因此您确实希望每次调用方法时都获取正确的高度,以防高度改变。
2。使 divHeight
计算 属性,无论如何将其声明为方法内的变量。
computed: {
divHeight() {
return this.$refs.divRef.clientHeight;
}
},
methods: {
firstMethod() {
var divHeight = this.divHeight;
...
},
secondMethod() {
var divHeight = this.divHeight;
...
}
}
divHeight
只会计算一次,第一次访问 属性 时。如果 div 的高度发生变化,则不会重新计算 divHeight
。此解决方案不适合这种情况,因为计算属性通常在 属性 依赖于该组件的其他可观察数据属性(Vue 无法观察到 this.$refs.divRef.clientHeight
)时使用。
3。使 divHeight
计算 属性,在一个方法内多次使用 this.divHeight
。
computed: {
divHeight() {
return this.$refs.divRef.clientHeight;
}
},
methods: {
firstMethod() {
this.divHeight/this.divWidth = something;
this.divHeight... other operations.
},
secondMethod() {
this.divHeight/this.divWidth = something;
this.divHeight... other operations.
}
}
除了您在每个方法中多次访问 this.divHeight
之外,这与 #2 相同。唯一超过 #2 的 "improvement" 是避免 属性 访问,这是可以忽略不计的;但是如果你在一个方法中使用 this.divHeight
多次 那么也许#2 最好避免在任何地方使用 this.
。
我建议改为:
methods: {
divHeight() {
return this.$refs.divRef.clientHeight;
},
firstMethod() {
var divHeight = this.divHeight();
...
},
secondMethod() {
var divHeight = this.divHeight();
...
}
}
这与#1 基本相同,只是它更短一些,因为您不必在所有地方都键入 this.$refs.divRef.clientHeight
。