React Fiber架构

3,635次阅读
没有评论

共计 882 个字符,预计需要花费 3 分钟才能阅读完成。

性能优化是一个系统性的工程,如果只看到局部,引入算法,当然是越快越好; 但从整体来看,在关键点引入缓存,可以秒杀 N 多算法,或另辟蹊径,探索事件的本质,可能用户要的并不是快……

React16 启用了全新的架构,叫做 Fiber,其最大的使命是解决大型 React 项目的性能问题,再顺手解决之前的一些痛点。

痛点

  • 组件不能返回数组,最见的场合是 UL 元素下只能使用 LI,TR 元素下只能使用 TD 或 TH,这时这里有一个组件循环生成 LI 或 TD 列表时,我们并不想再放一个 DIV,这会破坏 HTML 的语义。
  • 弹窗问题,之前一直使用不稳定的 unstable_renderSubtreeIntoContainer。弹窗是依赖原来 DOM 树的上下文,因此这个 API 第一个参数是组件实例,通过它得到对应虚拟 DOM,然后一级级往上找,得到上下文。它的其他参数也很好用,但这个方法一直没有转正。。。
  • 异常处理,我们想知道哪个组件出错,虽然有了 React DevTool,但是太深的组件树查找起来还是很吃力。希望有个方法告诉我出错位置,并且出错时能让我有机会进行一些修复工作
  • HOC 的流行带来两个问题,毕竟是社区兴起的方案,没有考虑到 ref 与 context 的向下传递。
  • 组件的性能优化全凭人肉,并且主要集中在 SCU,希望框架能干些事情,即使不用 SCU,性能也能上去。

解决进度

  • 16.0 让组件支持返回任何数组类型,从而解决数组问题; 推出 createPortal API , 解决弹窗问题; 推出 componentDidCatch 新钩子,划分出错误组件与边界组件,每个边界组件能修复下方组件错误一次,再次出错,转交更上层的边界组件来处理,解决异常处理问题。
  • 16.2 推出 Fragment 组件,可以看作是数组的一种语法糖。
  • 16.3 推出 createRef 与 forwardRef 解决 Ref 在 HOC 中的传递问题,推出 new Context API,解决 HOC 的 context 传递问题(主要是 SCU 作崇)
  • 而性能问题,从 16.0 开始一直由一些内部机制来保证,涉及到批量更新及基于时间分片的限量更新。

更多内容阅读以下文字

React Fiber 架构 - 司徒正美

正文完
 0
评论(没有评论)
验证码