Svelte store 的 get 方法查找性能
Svelte store's get method lookup performance
我有一个 Svelte 应用程序,其中大部分数据逻辑被提取到定义自定义商店的文件中。通常,我需要编写一个重复使用相同存储值的函数:
import { get } from 'svelte/store';
import { someStore } from './myStores';
function foo(): void {
const arr: string[] = get(someStore);
// ...lots of operations using arr
}
我目前的做法是,如果我只需要 someStore
的值一次,我将直接使用 get(someStore)
内联,但如果我在该函数中至少需要它两次,我将像上面一样将它分配给局部变量。这是因为我不确定一遍又一遍地调用 get
是否会影响性能。
了解 Svelte 商店的实现方式的人是否有任何直觉来判断这是否真的有必要?如果我将我的代码简化为只在任何地方使用 get(...)
而不是创建局部常量(我并不真正关心响应式行为改变函数中返回值),我会遇到任何性能问题吗?如果商店的价值是一个非常大的对象呢?
来自Svelte documentation on 'get':
Generally, you should read the value of a store by subscribing to it
and using the value as it changes over time. Occasionally, you may
need to retrieve the value of a store to which you're not subscribed.
get allows you to do so.
并且(粗体表示强调):
This works by creating a subscription, reading the value, then unsubscribing. It's therefore not recommended in hot code paths.
因此,从纯粹的性能角度来看,一旦您计划多次使用 get
,您最好直接订阅商店 - 即直接访问值 $someStore
使用 shorthand 语法。但是,如果您对保持本地数据与商店更新同步不感兴趣,或者更糟的是,如果您特别不想,那么您的方法看起来非常好。
然而,在实践中,您可以简单地执行以下操作:
import { someStore } from './myStores';
function foo(): void {
const arr: string[] = $someStore;
// ...lots of operations using arr
}
并节省额外的进口费用。如果您不关心商店的价值是否变化,或者如果您 想要 跟上变化,那么您可以保存自己的分配并在中使用 $someStore
代替 arr
(或您将存储值分配给的任何变量)。
我有一个 Svelte 应用程序,其中大部分数据逻辑被提取到定义自定义商店的文件中。通常,我需要编写一个重复使用相同存储值的函数:
import { get } from 'svelte/store';
import { someStore } from './myStores';
function foo(): void {
const arr: string[] = get(someStore);
// ...lots of operations using arr
}
我目前的做法是,如果我只需要 someStore
的值一次,我将直接使用 get(someStore)
内联,但如果我在该函数中至少需要它两次,我将像上面一样将它分配给局部变量。这是因为我不确定一遍又一遍地调用 get
是否会影响性能。
了解 Svelte 商店的实现方式的人是否有任何直觉来判断这是否真的有必要?如果我将我的代码简化为只在任何地方使用 get(...)
而不是创建局部常量(我并不真正关心响应式行为改变函数中返回值),我会遇到任何性能问题吗?如果商店的价值是一个非常大的对象呢?
来自Svelte documentation on 'get':
Generally, you should read the value of a store by subscribing to it and using the value as it changes over time. Occasionally, you may need to retrieve the value of a store to which you're not subscribed. get allows you to do so.
并且(粗体表示强调):
This works by creating a subscription, reading the value, then unsubscribing. It's therefore not recommended in hot code paths.
因此,从纯粹的性能角度来看,一旦您计划多次使用 get
,您最好直接订阅商店 - 即直接访问值 $someStore
使用 shorthand 语法。但是,如果您对保持本地数据与商店更新同步不感兴趣,或者更糟的是,如果您特别不想,那么您的方法看起来非常好。
然而,在实践中,您可以简单地执行以下操作:
import { someStore } from './myStores';
function foo(): void {
const arr: string[] = $someStore;
// ...lots of operations using arr
}
并节省额外的进口费用。如果您不关心商店的价值是否变化,或者如果您 想要 跟上变化,那么您可以保存自己的分配并在中使用 $someStore
代替 arr
(或您将存储值分配给的任何变量)。