gpt4 book ai didi

elm - 如何在不为每条消息复制整个结构的情况下传递状态?

转载 作者:行者123 更新时间:2023-12-04 16:52:38 26 4
gpt4 key购买 nike

我有一个文本框,在显示字符时速度非常慢。

我曾经观察到一个与之相关的 Stackoverflow 异常。

我认为性能问题与准备门户值有关:

Sources.InputAccessId _ ->
( { model | portal = portal }, sourceCmd )

每次输入一个字符,我都会复制并修改一条新的门户记录,这会消耗更多内存。

代码可以在下面找到。

主要:

onSourcesUpdated : Sources.Msg -> Model -> ( Model, Cmd Msg )
onSourcesUpdated subMsg model =
let
pendingPortal =
model.portal

provider =
pendingPortal.provider

profile =
provider.profile

source =
pendingPortal.newSource

( sources, subCmd ) =
Sources.update subMsg
{ profileId = profile.id
, platforms = model.platforms
, source = { source | profileId = profile.id }
, sources = profile.sources
}

sourceCmd =
Cmd.map SourcesUpdated subCmd

pendingProvider =
{ provider | profile = { profile | sources = sources.sources } }

portal =
{ pendingPortal | newSource = sources.source, provider = pendingProvider }
in
case subMsg of
Sources.InputAccessId _ ->
( { model | portal = portal }, sourceCmd )
...

Sources.elm:

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
let
source =
model.source
in
case msg of
InputAccessId v ->
( { model | source = { source | accessId = v } }, Cmd.none )
...

如何在每次事件发生时传递状态而不复制整个结构?

最佳答案

你可能想用像这样的库来消除这些事件:elm-debounce

不过,去抖动的结果是某些事件将被丢弃,因此当用户完成输入/与页面交互时(更准确地说,在 - 可配置 - 超时之后),您只会得到一个对所有事件求和的事件。

关于elm - 如何在不为每条消息复制整个结构的情况下传递状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47379812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com