内容来源:2017年4月8日,携程框架研发部高级研发经理魏晓军在“第二届中国前端开发者大会”进行《CRN-WEB(Ctrip React Native Framework For Web)》演讲分享。IT大咖说(ID:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
阅读字数:1375 | 3分钟阅读
嘉宾演讲视频及PPT,请点击:http://t.cn/Rgtmbe9
摘要
随着公司内部CRN项目的日益增多,越来越多的业务部门开始意识到,是否可以将CRN的项目直接运行在浏览器上,以免去他们在H5和SEO上的额外开发。甚至有的Web开发人员在想,是否能够在他们熟悉的浏览器上去开发CRN的项目,以便他们能更好、更快速的完成CRN项目。这次就是基于上述的场景,分享下我们内部的解决方案——CRN-WEB,希望能够帮助到大家。
什么是CRN-WEB
背景
最早是React Native实现了用一种方式开发APP。由于种种原因和限制,我们公司基于RN和以往的API开发了CRN。CRN最简单的功能就是打通了Android和iOS,开发人员只要写一套代码就能在Android和iOS上运行。CRN还对iOS的控制、开发效率的提高以及Hybrid性能的问题都有所帮助。
CRN项目的大规模出现,使得BU对H5、SEO的需求更加迫切,开发的CRN代码是否能在浏览器上运行呢?
其实不止我们有这样的需求,在国外有一个React-Native-Web的项目,国内淘宝也做了一个React-Web。可见国内一些公司对这方面的需求还是比较大的。
CRN-WEB的出现
Hybrid团队最初的梦想只是让RN的代码运行在浏览器上,这样就不用再去额外开发一套H5的代码。
简介
于是CRN-WEB就是产生了。它的底层是基于ReactJS,兼容RN和CRN组件及接口的H5框架。CRN-WEB完成了RN的最后一公里,弥补了RN在H5上的短板。支持RN和CRN的项目类型。
特点
CRN-WEB可以快速生成已有或者即将开发的CRN项目的H5版本。它和CRN、RN的API保持一致,代码可以直接运行在CRN或H5环境中。开发体验友好,支持元素审查、源码改动动态刷新,运行时debug远程真机调试。CRN-WEB支持浏览器、微信等多个平台。
CRN-WEB的架构设计
功能组成
从大方向来说,功能组件包括了RN的组件和API。但要真正实现还需要样式、事件和生命周期等等。
要做自己的基于RN开发的Web框架,一定会用到自己公司的组件,比如Auth、Pay、UBT、ABTesting和Model。
还有可以拿来直接用的第三方插件React-Native-Web-Scrollable-Mixin。
CRN还有一些扩展的业务自己及API。应用层最外层的一个组件是用来封装APP里的路由,管理路由配置与Native交互,绑定Native暴露的变量与方法。对页面的封装功能是进行页面切换,PV自动埋点,页面生命周期自动管理。ViewPort可以理解为Web上的视口,页面展示的内容应该使用ViewPort包起来,根据导航栏的隐藏与否自动调整页面大小,优化页面切换卡顿问题。
运行环境有.Net上的H5、Hybrid和Node上的H5。
代码展示
如何使用CRN-WEB
开发环境工具
特点:
基于node.js,快速搭建开发环境。
使用简单,功能强大,支持源码调试。
源码修改,自动热更新。
几乎无修改的快速生成React-Native的H5版本。
生产环境工具
特点:
1、同时生成node.js项目、.net项目、hybrid项目。
2、自动提取BU用到的框架模块,使得框架代码可以根据BU的实际使用情况动态生成import{Navigator,Platform}from’react-native’;
成果就是攻略了FlightKnowAll页面(从giz250k优化到gzip131k)。
3、将原有的同步加载模式转为异步加载模式,使得BU的每个页面都可以实现按需加载。
CRN-WEB的现状及发展
组件数量
目前我们的框架总共提供了150多个component和API。其中我们自己扩展的CRN component大概有50个,涉及到react-native的API有30多个,react-native component有40个,module的其它功能组件有30个左右。
市场
以携程为例,目前我们的CRN项目大约有90多个,Hybrid项目有100多个,react-native项目有30多个。这些项目是完全可以转到CRN WEB上去做的,都是我们的潜在用户。
未来
接下来我们要做的事就是功能完善以及性能优化,完善浏览器端的兼容性问题。
我们正在和去哪儿团队合作开发YRN-WEB。我们两家维护同一套底层,每家的业务代码加上这个底层就可以运行在各自的APP里去。
还有想做的就是开发一些更快捷的工具,更多地推广CRN WEB,这样框架的问题才能暴露出来。
我今天的分享就到这里,感谢聆听!