解构赋值与使用整个对象——性能如何?
Destructuring assignment vs using whole object - what about performance?
解构赋值(在我的情况下使用 Vue 可组合项)是否有任何性能 gain/tradeoff?
例如,我有一个组件显示在 vue-i18n 中选择的当前语言。
我可以通过解构来做到这一点:
<template>
<span>locale: {{ locale }}</span>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const { locale } = useI18n()
</script>
或者使用整个对象(函数?)
<template>
<span>locale: {{ i18n.locale.value }}</span>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const i18n = useI18n()
</script>
其他库或自定义可组合项(如状态管理)也是如此。在所有教程或示例中,有时会使用第一个选项,有时会使用第二个选项。这只是固执己见的偏好,还是实际上一个比另一个更好?
不,解构对性能没有显着影响。它实际上只是语法糖,使代码更加简洁和可读。
编辑:我要补充一点,您通常不应该像这样担心核心语言功能的性能。担心哪种数据结构最适合特定用例,不要担心 syntax 表现最好。如果您的编码能力或多或少,那么性能优化应该是一个相当不常见的练习,而不是您的首要考虑。代码的可读性和可维护性,只有当你注意到它是一个问题或碰巧知道它很关键时才担心性能。
访问对象属性在 JS 中几乎不需要任何时间。在解构过程中这样做一次,或者在模板中多次这样做都无关紧要。
所以这只是一个偏好问题 - 以及您在模板中使用的同一对象的属性数量的问题(您的示例只使用一个,但如果使用多个,则有一个单独的 const
每一个基德都不必要地使代码膨胀)
解构的想法只是使用相关值而不是长点符号。
性能我不认为,但如果你想在值不存在时进行故障安全检查,这很有用。
如果不解构,另一种方法是 obj?.prp1?.prp2
解构赋值(在我的情况下使用 Vue 可组合项)是否有任何性能 gain/tradeoff?
例如,我有一个组件显示在 vue-i18n 中选择的当前语言。
我可以通过解构来做到这一点:
<template>
<span>locale: {{ locale }}</span>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const { locale } = useI18n()
</script>
或者使用整个对象(函数?)
<template>
<span>locale: {{ i18n.locale.value }}</span>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const i18n = useI18n()
</script>
其他库或自定义可组合项(如状态管理)也是如此。在所有教程或示例中,有时会使用第一个选项,有时会使用第二个选项。这只是固执己见的偏好,还是实际上一个比另一个更好?
不,解构对性能没有显着影响。它实际上只是语法糖,使代码更加简洁和可读。
编辑:我要补充一点,您通常不应该像这样担心核心语言功能的性能。担心哪种数据结构最适合特定用例,不要担心 syntax 表现最好。如果您的编码能力或多或少,那么性能优化应该是一个相当不常见的练习,而不是您的首要考虑。代码的可读性和可维护性,只有当你注意到它是一个问题或碰巧知道它很关键时才担心性能。
访问对象属性在 JS 中几乎不需要任何时间。在解构过程中这样做一次,或者在模板中多次这样做都无关紧要。
所以这只是一个偏好问题 - 以及您在模板中使用的同一对象的属性数量的问题(您的示例只使用一个,但如果使用多个,则有一个单独的 const
每一个基德都不必要地使代码膨胀)
解构的想法只是使用相关值而不是长点符号。 性能我不认为,但如果你想在值不存在时进行故障安全检查,这很有用。 如果不解构,另一种方法是 obj?.prp1?.prp2