开源一个新的高性能组件库

#1

很长时间没有发贴了,安利一个新的组件库。
https://github.com/sheinsight/shineout

年初的时候入职了一家新公司,有几十个后台系统,都是基于React和antd的。公司是做垂直电商的,有些管理和编辑的页面非常复杂,例如某些报表,业务方需求单页面展示60列500行;例如sku的编辑页,一个页面最多有上千个输入组件。这种情况现有的组件在性能上都无法满足需求,于是前端团队决定自己开发一套组件库。

我自己很久之前开源了个人的组件库 react-ui,之前都是用闲暇的时间维护,随着React项目经验的积累,对于架构有许多不满意的地方,一直思考如何改进。这次因为公司和团队非常支持,可以全力投入开发,也没有给时间上的限制,所以完全抛弃了之前的架构,完全重新开始。

这次开发大约半年左右,目前算是基本完成,也应用了很多的项目。因为我们是antd的重度用户,所以加了一个antd的theme,目前公司的老项目都是和antd混用。

大部分的组件库,组件都差不太多,简单说说这个组件库的特点吧。

首先,是性能的优化。通过各种懒加载和注入(这个项目里有个看起来很奇怪的东西叫Datum)控制数据。对于数据展示的组件,比如Table,Select,Tree,都是以10000的数据进行的设计和测试。Form 是按1000以上的输入组件设计。

其次,更简洁的API。Shineout中的大部分组件,例如Select,对用户只暴露了一个组件,Option这样的子组件,通过数据来生成。这样做,也有性能的考虑。子组件大部分都需要cloneElement来绑定事件,增加额外的开销。Form 实现了类双向绑定的机制,可以处理比较复杂的场景。

轻量。开发中尽量减少了第三方依赖,或者选择了比较小的库(比如时间处理没有用moment,用了date-fns的部分函数)。目前,整个库打包完代码js部分不到500KB(包含了必要的第三方依赖),gzip后不到100KB。

因为全新开发,没有历史包袱。所以React的版本比较高,基于 React 16 开发,避开了componentWillMount, componentWillReceiveProps,用了最新的 context API,最低兼容到React 16.0.0。希望升到React 17可以做到无痛吧。

最后,说说不足的地方。这个组件库开发的时间不算很长,没有完整的单元测试。主要靠团队的小伙伴们在项目中使用反馈,目前大概应用了十多个比较大的项目,算是比较稳定。

欢迎各位试用,有问题的话,可以提issue或者在这里留言,PR就更好啦。

5 Likes
#2

看过源码,感觉比ant更加优雅

#3

软件大道的朋友你好~ 我们在选型即将枯竭之际看到这篇文章。
阿里嘎多,简直是如沐春风~~

我相信我们后面会多联系的~~哈哈

#4

哈哈,欢迎使用,多提issue~~