React渲染模型和本地工具包有什么区别

时间:2019-04-03 22:27:32

标签: reactjs qt gtk

我应该澄清一下,我对渲染模型特别感兴趣,因为据我了解,React只渲染已更改的东西,GTK和QT之类的本地工具包不会这样做吗?他们会做什么呢?

2 个答案:

答案 0 :(得分:1)

本机工具包也只能重新渲染已更改的内容,但是发生的方式略有不同。

本机工具箱渲染包括从字面上向屏幕绘制像素。在React中,渲染包括操纵DOM,然后由浏览器渲染到页面中,然后通过编写浏览器的本机工具包将该页面的像素绘制到屏幕上。因此,本机工具包具有在各个级别进行优化的自由度更高,而React仅控制DOM级别。

在GTK中,粗略地说,UI小部件能够在知道某些内容已发生更改并需要重新渲染时“使”其像素区域“无效”。在下一次绘画更新期间,无效区域将根据新状态重新绘制。该工具包可以将两次绘制更新​​之间发生的多个失效合并为一个,例如以优化性能。

答案 1 :(得分:0)

我在想您已经知道什么是DOM。所有JavaScript流行框架的核心都是DOM Manipulation,当某些元素发生更改而无需重新加载页面时,这就是给您“反应性”的感觉。通常,DOM操作是非常昂贵的性能明智的选择,因为您必须倾听更改,并且在某些情况下必须重新呈现整个DOM。 React的反应系统要好得多!

  

在React中,对于每个DOM对象,都有一个对应的“虚拟DOM对象”。虚拟DOM对象是DOM对象的表示,   就像一个轻量级的副本。   虚拟DOM对象与真实DOM对象具有相同的属性,但是   它缺乏真正的力量来直接更改   屏幕。   操作DOM很慢。操作虚拟DOM非常重要   更快...呈现JSX元素时,每个虚拟DOM   对象得到更新。

     

这听起来效率极低,但是成本却微不足道   因为虚拟DOM可以快速更新。

     

虚拟DOM更新后,React将比较虚拟DOM   带有在更新之前拍摄的虚拟DOM快照。

     

通过比较新的虚拟DOM和更新前的版本React   准确找出哪些虚拟DOM对象已更改。这个   这个过程称为“差异化”。

这就是不变性在反应中如此重要的原因,它比侦听特定现有节点中的更改更容易检测何时创建新节点。

在此awesome article

中查看更复杂的解释