Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分解分配与使用整个对象-性能如何?_Javascript_Vue.js_Ecmascript 6_Vuejs3_Vue I18n - Fatal编程技术网

Javascript 分解分配与使用整个对象-性能如何?

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 }

解构分配(在我使用Vue composables的情况下)是否有任何性能增益/折衷

例如,我有一个显示在vue-i18n中选择的当前语言的组件

我可以通过分解结构来实现这一点:

<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>