npm install anujs
anujs是一个高级兼容React16的迷你React 框架,它兼容React16.3.0的99%接口, 跑通了官方788个case, 支持React生态圈的99%的组件与UI库。
中国用户可以加QQ交流学习群: 370262116
众所周知, React 一直存在体积过大的诟病, 因此我在熟读其源码的基础上,重新实现了React, gz后只有React+ReactDOM的三分之一。详细数据见 https://bundlephobia.com/, anu@1.4.3只有 13.1 kb, react@16.4.1为 2.3 kb, react-dom@16.4.1为 30.5 kb。如果使用路由器,react-router-dom@4.3.1为11 kb, reach@1.0.1为 4.3kb。
现在React全家桶有如下常用套餐
套餐1:react + react-dom + react-router-dom + redux + react-redux + redux-saga, 体积为 2.3 + 30.5 + 11 + 5 + 4.3 + 8.4 = 61.4 kb 合适于刚入门的人群
套餐2:react + react-dom + react-router-dom + mobx + mobx-react 体积为 2.3 + 30.5 + 11 + 13.8 + 6.4 = 64 kb 合适于对redux怨言的人群
套餐3:anujs + reach + redux + react-redux + rematch 体积为 13.1 + 6 + 2.5 + 5 + 4.3 = 31 kb 合适于体积、兼容性、易用性有要求的人群
上述代码的测量工具为gzip-size-cli, jsize 及 https://bundlephobia.com/
主要竞品有 inferno, preact, rax, react-lite, nervjs, 前两个是海外的, 后三个是中国的,中国由于网络的状况,对体积要来比较高。
inferno, 需要加上inferno-compat, 才能与官方的API保持一致, 但组件套组件的情况下, 生命周期钩子的执行顺序与官方不一致, 因此不兼容React的绝大多数的UI库。不支持旧式IE。
preact, 需要加上preact-compat, 才能与官方的API保持一致, 但组件套组件的情况下, 生命周期钩子的执行顺序与官方不一致, 因此不兼容React的绝大多数的UI库。 并且preact-compat内部使用了Object.definePropety,因此无法运用于IE8, 也造成它的性能严重劣化。
rax, 中国的阿里巴巴集团推出,支持React16大多数API,不支持IE8, 能跑一些React UI库。
react-lite, 中国的携程集团推出,只兼容React15, 支持IE8,能跑一些React UI库。
nervjs, 中国的京东集团推出,支持React16大多数API,代码与inferno, rax很相近, 没有case证明其兼容IE8,性能指标也很可疑。
npm test