Javascript 分解分配与使用整个对象-性能如何?
解构分配(在我使用Vue composables的情况下)是否有任何性能增益/折衷 例如,我有一个显示在vue-i18n中选择的当前语言的组件 我可以通过分解结构来实现这一点:Javascript 分解分配与使用整个对象-性能如何?,javascript,vue.js,ecmascript-6,vuejs3,vue-i18n,Javascript,Vue.js,Ecmascript 6,Vuejs3,Vue I18n,解构分配(在我使用Vue composables的情况下)是否有任何性能增益/折衷 例如,我有一个显示在vue-i18n中选择的当前语言的组件 我可以通过分解结构来实现这一点: <template> <span>locale: {{ locale }}</span> </template> <script setup> import { useI18n } from 'vue-i18n' const { locale }
<template>
<span>locale: {{ locale }}</span>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const { locale } = useI18n()
</script>
语言环境:{{locale}}
从“vue-i18n”导入{useI18n}
const{locale}=useI18n()
或者使用整个对象(函数?)
语言环境:{i18n.locale.value}
从“vue-i18n”导入{useI18n}
常数i18n=useI18n()
其他库或自定义组件(如状态管理)也是如此。在所有教程或示例中,有时使用第一个选项,有时使用第二个选项。这只是一种自以为是的偏好,还是一种比另一种更好?不,解构没有显著的性能影响。它实际上只是语法上的糖分,使代码更加简洁易读
编辑:我想补充一句,您一般不应该担心这样的核心语言特性的性能。担心哪种数据结构最适合特定用例,不要担心哪种语法性能最好。如果您的编码能力或多或少,那么性能优化应该是一个相当少见的练习,而不是您的首要考虑。代码的可读性和可维护性,只有当您注意到这是一个问题或碰巧知道它很关键时,才会担心性能。不,分解结构不会对性能产生重大影响。它实际上只是语法上的糖分,使代码更加简洁易读
编辑:我想补充一句,您一般不应该担心这样的核心语言特性的性能。担心哪种数据结构最适合特定用例,不要担心哪种语法性能最好。如果您的编码能力或多或少,那么性能优化应该是一个相当少见的练习,而不是您的首要考虑。代码的可读性和可维护性,只有当您注意到这是一个问题或碰巧知道它很关键时,才会担心性能。在JS中访问对象属性几乎不需要任何时间。无论是在分解过程中执行一次还是在模板中执行多次,这都无关紧要
因此,这只是一个偏好的问题——以及您在模板中使用的同一对象的多少个属性的问题(您的示例只使用了一个属性,但如果使用了多个属性,那么每一个单独的
常量都会使代码不必要地膨胀)在JS中访问对象属性几乎不需要任何时间。无论是在分解过程中执行一次还是在模板中执行多次,这都无关紧要
因此,这只是一个偏好的问题——以及您在模板中使用同一对象的多少个属性的问题(您的示例仅使用一个属性,但如果使用多个属性,则每一个单独的const
都会不必要地膨胀代码)de结构的思想只是使用相关值,而不是长点符号。
我不认为是性能问题,但是如果您想在值不存在时进行故障安全检查,那么它是有用的。
另一种方法是obj?.prp1?.prp2如果没有反结构,反结构的思想只是使用相关值,而不是长点符号。
我不认为是性能问题,但是如果您想在值不存在时进行故障安全检查,那么它是有用的。
另一种方法是Obj.Prp1.Prp<TBH,我考虑<代码>用户。对于hirarchical对象,我个人更喜欢阅读完整的HirArchiy而不是变量名,我首先需要找到并阅读声明。(例外:名称空间。上下文很少需要它们。)@JohannesH,如果你像我一样写了很多React代码,那么你就经常写this.props.user.email
。这会变得冗长乏味,因此在这种情况下,我总是至少将结构分解到user
级别。在这样的情况下,它是一个很好的功能,还可以从作为参数传递的对象中解构字段,否则您将编写param.field
,而不仅仅是field
。而且您并不孤独。事实上,我相当确信少数程序员会同意我上面的说法。我想说的是“这让颂歌更具可读性”是主观的,并不是普遍正确的。我想说的问题是,在给定的上下文中,user
属于this.props
(在我的示例中)的代码提醒是否有用/显著。这是一个判断调用。TBH,我考虑<代码>用户。名称<代码> >代码>用户。电子邮件<代码> >或代码>汽车。对于hirarchical对象,我个人更喜欢阅读完整的HirArchiy而不是变量名,我首先需要找到并阅读声明。(例外:名称空间。上下文很少需要它们。)@JohannesH,如果你像我一样写了很多React代码,那么你就经常写this.props.user.email
。这会变得冗长乏味,因此在这种情况下,我总是至少将结构分解到user
级别。在这样的情况下,它是一个很好的功能,还可以从作为参数传递的对象中解构字段,否则您将编写param.field
,而不仅仅是field
。而且您并不孤独。事实上,我相当确信少数程序员会同意我上面的说法。我只想
<template>
<span>locale: {{ i18n.locale.value }}</span>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
const i18n = useI18n()
</script>