访问以前的陡峭HTML

时间:2018-06-24 21:48:31

标签: elm

我正在学习Elm,看来您每个view“框架”都创建了一个新的VirtualDOM。

view : Model -> Html Msg

由于没有引用先前生成的Html值,因此没有选择(以功能性方式)对其进行更新。您必须从头开始重建它。这是非常低效的。

如何重用旧框架并仅更新更改的节点(及其祖先)?

编辑

榆树有Html.Lazy作为答案。有了它和聪明的运行时,您就可以避免重复大部分工作和数据分配(无用的垃圾收集器压力是一件坏事),但要以增加程序员的认知负担为代价。

在术语级别(而不是类型级别)考虑严格性/惰性是容易出错的(请参见Haskell和seq)。

完美的解决方案是使用具有以下签名的view函数:

view : Model -> Html Msg -> Html Msg

通过这种方式,您可以访问先前的框架VirtualDOM,并且可以根据需要与新的框架数据结构共享尽可能多的空间。

此选项可用吗?如果没有,为什么不呢?

1 个答案:

答案 0 :(得分:1)

您知道,Elm使用“虚拟DOM”。您的程序将输出描述所需DOM结构的轻量级对象,并且虚拟DOM实现会“区分”当前和新结构,并根据需要添加,修改和删除元素/属性/属性。

当然,与直接操作DOM相比,使用虚拟DOM会有很小的性能损失,但是在大多数Web应用程序中,差异并不重要。如果您发现应用程序的视图功能性能不佳,则有几种提高性能的方法,例如Html.Lazy

许多其他流行的库都使用虚拟DOM,例如React,Angular和Vue。通常,使用虚拟DOM(而不是“手动”操作DOM)呈现应用程序会更容易,因此许多流行的框架都实现了一个。