然后库或框架就会解决这个问题。或 Alpine 这样的小东西,他们实际上是直接这样做的。他们将您提供给他们的 UI 外观字符串转换为 HTML 元素。然后他们将每个元素与文本 DOM 较。当你最终得到的 UI 变得越来越大时,这可能会对性能产生影响,因为一遍又一遍地查询 DOM 会变得昂贵。如果您想了解出现问题的界面类型,请右“收藏夹”按钮或 Facebook 上“喜欢”按钮上的元素。看看 div 的嵌套,让您到达该元素。这是非常非常深的。它就像十几个左右的 div,一个嵌套在另一个 div 中,只是为了那一条推文。 克里斯:当你开始深入这么多层时,它开始真正影响性能。虚拟 DOM 所做的不是每次都检查真实 DOM,而是创建一个基于对象的 UI 在 JavaScript 中的映射。然后对您想要替换现有 UI 的 UI 执行相同的操作,并比较这两个 UI。
从理论上讲这比在真实
实现的性能要高得多。一旦它获得了需要更改的内容的列表,它就会开始执行这些更改。但它只需要攻击次都检查每一个元素。如果您有 或类似的界面,那么虚拟 DOM 可能很有意义。 克里斯:它面临的挑战是……在将整个 东西解压到实际的代码波之前,Preact 和 React 之间的差异是 27 KB。仅原始下载、解 阿曼手机号码列表 包和编译时间就会给 UI 上的初始负载增加相当多的延迟。如果您的用户使用的不是 Apple 的最新设备,这种情况会变得更加明设备或功能手机,或者如果你的用户生活在发展中动时间会更慢。最重要的是,由于额外的抽象,实际的交互时间会变慢。 克里斯:因此,不仅仅是您加载它,它们的速度也相当。由于其中存在所有额外的代码,某人进行的每次微交互以及需要发生的更改也可能会稍微慢一些。如果您有一个非常非常复杂的 UI,其中包含大量嵌套元素和大量数据,那么虚拟 DOM 的性能提升将超过额外的代码重量。
但是对于我所看到的大多
数开发人员使用 的典型应用程序的任何典型您从虚拟 DOM 中获得的好处并不存在,而且他们的情况会更好。即使您想保持 React 的便利性,也可以使用 Preact。它的大小只是其一小部分,但工作方式完全相同,而且性能更高。这是我倾向于争论的事情。 克里斯:我们需要更好地为工作选择合适的工具。如果你采用这样的方法,如果你达到了虚拟 DOM 真正有意义的地步,那么将 Preact 移植到 React 中比你自己推出要容易得多。最重要 传真列表 的是,由于额外的抽象,实际的交互时间会变慢。 克里斯:因此,不仅仅是您加载它,它们的速度也相当。由于其中存在所有额外的代码,某人进行的每次微交互以及需要发生的更改也可能会稍微慢一些。如果您有一个非常非常复杂的 UI,其中包含大量嵌套元素和大量数据,那么虚拟 DOM 的性能提升将超过额外的代码重量。