类似于 React 的 JavaScript 库 Inferno 发布了 1.0 版本,对于那些熟悉 React,但对现代化 JavaScript 库的大小感到沮丧的开发人员提供了一个新的可选方案。
Inferno 的口号是“用于构建现代用户界面的、超快的类 React JavaScript 库”。它的目标用户是那些喜欢 React 的理念和 API,但是并不需要其辅助功能(比如使用 React Native 的能力)的开发人员。Inferno 是严格针对浏览器或服务器以及典型 DOM 构建的。在网络传输方面,Inferno 的大小是 9 KB ,而 React 的大小是 45 KB(两者均为 gzip 的文件大小)。这样的话,在移动设备上,就会有更短的解析时间,因此,性能也会更好。
该团队花费了很多的时间在实际的性能提升上。在一个采访中,这个库的创建者 Dominic Gannaway 提到了在性能方面所开展的工作:
进行广泛的检查,确保反优化(deoptimisations,“deopts”,指的是 JIT 编译器无法编译的地方)的内容达到最小化。Inferno 团队采用了基准测试、探测工具(IRHydra、Chrome Dev Tools),并对代码库的各个部分进行了很多的重写,只是为了持续地寻找移除 deopts 的方法。
Inferno 的代码非常类似于 React,如下的代码展现了这一点:
class MyInfernoTest extends Component { componentDidMount() { setInterval(() => { this.setState({ time: (new Date()).toLocaleString() }); }, 200); } render() { return <h2> Current time: <span>{this.state.time}</span> </h2> } }
在宣布版本发布的文章中,核心团队的工程师 Luke Sheard 指出,2016 年,在 Github 上,该项目的 star 数量已经从 150 个攀升到年底的近 7300 个。目前它已经超过了 8000 个。尽管因为性能的提升,Inferno 特定的代码需要一些变更,但是通过恰当的兼容性库,它可以作为替换 React 的一个很好的方案。
今年,团队希望扩展框架的生态系统,但是还需要 Gannaway 在各个方面的指导。在 2016 年底,Gannaway宣布加入了 Facebook,从事 React 的工作。Sheard 说虽然 Gannaway 的作用会减少,但 Inferno 将会继续发展,他们会继续关注如何提升该库的核心体验和所支持的广度:
在 2017 年,Inferno 将会持续关注核心功能的提升,尽快修正缺陷并且会为社区提供支持和使用指南,还会花费精力采纳新的库,扩展 Inferno 的涉及范围和实现模块化,使其能够应用到范围更广的场景中。到目前为止,很多模块已经移植过来了,但是通过社区的努力,我们希望能够继续扩展这项工作。
相对于更加著名的 React 的替代方案 Preact ,Inferno 是一个新的参与者。这两者都可以用来替换 React,但是它们在关注点上有所差异。
评论