第期认识React的diff算

北京好治疗湿疹医院 http://m.39.net/pf/a_8890895.html

前言

今天的文章来自

熊建刚的授权分享。

正文从这开始~

React提供一种声明式API,使得我们不需要了解在每次更新时具体改变了什么。这使得开发应用很简单,但是React如何实现这一点并不明显。本篇文章介绍React的diff算法为何在满足高性能应用要求时,React组件的更新是可预测的。

在使用React时,我们首先思考创建React节点树的render()方法,在下一次state或props更新时,render()方法将返回另一个React元素树,随后React比较两颗不同的React节点树,并据此更新页面视图。

已经有一些基本方案解决在最小化操作下比较一颗React节点树到新的React节点树之间的不同。但是,最先进的算法时间复杂度也是O(n^3),n是节点树的元素数量。

diff算法

如果在React中使用这些算法,展示个元素将要进行10亿次比较,这个性能太低;React实现了一个时间复杂度为O(n)的探索式算法,该算法基于两点假设:

不同类型的元素生成不同的节点树

开发者通过key属性的不同表现指出哪个子元素应该渲染。

实际上,这两点假设对于大多数实践是有效的。

在比较两个React节点树时,React首先比较根元素,随后的行为取决于根元素类型。

根节点不同类型

只要根节点类型不同,React就会销毁旧节点树,创建新节点树。

在销毁节点树时,旧的DOM节点会被销毁,React组件实例触发


转载请注明:http://www.aierlanlan.com/grrz/577.html