我有一个文本框,在显示字符时速度极慢。
我曾经观察过与之相关的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 )
...
每次事件发生时,如何在不复制整个结构的情况下传递状态?
答案 0 :(得分:0)
您可能希望使用这样的库去除这些事件:elm-debounce
然而,去抖动的结果是,某些事件将被丢弃,因此当用户完成键入/与页面交互时(更准确地说,在 - 可配置 - 超时之后),您只能得到一个总和它们。