百度母婴技术团队—基于Reactjs实现webapp #1

Open
my-fe opened this Issue 2 days ago · 16 comments

Labels

None yet

Milestone

No milestone

Assignee

No one assigned

14 participants

my-fe commented 2 days ago

由于最近的reactjs实在太火,而且距离第一版已经快2年的时间了,已经相对稳定和成熟了,基于这两个前提下,团队对reactjs及其他开源技术进行了相关调研,发现落地是可行的,我们有4名前端同学,从调研到上线,大概花了1个半月的时间,期间有踩一些坑,后面会说,整个开发总体来说是非常顺利的,下面进入正题~~

产品简介

线上应用:mami.baidu.com

我们做的是一个移动端的单页webapp,可以在这个h5页面完成商品选择->支付->订单跟踪整个闭环

技术选型

Reactjs

React.js是Facebook在2013年开源的一个JS框架,在目前的前端开发的主流模式MVC和MVVM中,React主要专注于View层的开发,即视图部分。

使用React开发的好处有以下几点:

  1. React倡导组件化的开发模式,这样的开发模式和客户端开发(iOS和Android)的模式很类似。这样就可以实现组件最大限度的复用;
  2. React只负责视图部分的开发,很容易和其他已有的框架进行融合,例如Backbone和Angular,可以比较轻松的融入之前的项目中;
  3. React通过virtual-dom和dom-diff的技术,避免了频繁操作DOM带来的性能损耗,开发的应用很流畅;
  4. React通过virtual-dom实现了同构JS,这样一来前后端可以使用一套模板,节省了传统开发模式中要在前后端两套模板的时间;
  5. React自从开源以来,获得了前端社区的广泛关注和好评,先前比较主流的库都针对React实现了相应的版本,在开发过程中有非常多的组件可以使用,避免了重复造轮子的困扰;

基于以上几个优点,在本次项目中我们选择了React.js作为前端开发的框架。

项目中实际是使用下来reactjs有2点留下了深刻的印象:

  • 规范:遵守W3C规范,基于web component的组件化开发模式,可读性和可维护性都和传统开发不可同日而语(这个很重要,因为市面上的很多框架都是自行一套的接口风格,群雄割据的时代已经快要结束,现在的框架如果不遵守w3c规范,自己意淫一套,开发者初次上手体验会很差)

  • 性能:操作虚拟Dom的速度React具有绝对的优势相对于传统web开发

Redux

redux是一个优秀的前端框架,用于管理web应用中的整个数据流。

react只是MVC中的V层,在一个大型webapp中,以一种合理的形式来组织、维护不同来源的数据非常重要,我们希望在整个应用正确动态更新演变的同时,能够有清晰的代码结构、方便不同开发者分工协作、较低的维护成本。

redux是flux多种实现的一个升级版,具有以下几个特征:

  1. 整个应用的状态(state)存储为一个对象. 单一数据源使得client端可以直接使用server端构建的单一对象,方便对当前状态的获取,同时使得调试简单。

  2. 极强的数据流约束。redux数据流的变化只能由action触发,由reducer产生新的state,并且state只读,代码结构一致、清晰,并且不同的层不会有重复代码。

  3. 完善的state拆分整合机制。 将state分为不同数据块,每一块分别维护自己的action以及reducer,这使得逻辑清晰,并且分工协作便捷。

  4. 强大的开发调试工具。webpack的hotload以及redux-devtools,使得调试方便,开发效率大大提高。

  5. 服务端渲染。与客户端相比,服务端生成一个state对象并返回给页面,就可在server和client实现同构的渲染。

  6. 无复杂对象,action与reducer分别为纯JavaScript对象和函数,观念清晰,无复杂对象的学习、维护成本。

  7. 功能完善,文档清晰。 强大的中间件机制以及丰富的开源中间件库,使得redux功能更加完善,如何发异步请求、异步数据流如何处理都有规定以及清晰的文档。

  8. react-redux使得redux与react结合更顺畅。

以上几个特征在母婴项目中也得到了很好的体现,redux是做单页web应用很好的选择。

nodejs

我们基于团队内的一个nodejs的mvc框架Lark.js,实现前后端分离,这个框架已经开源,

Lark.js 是一个面向大并发大流量互联网服务的工业级 Node.js 框架[ 1 ]。它是从一个 10亿级以上 pv 的线上node.js服务抽象出来的一个通用框架,这里需要注意的是,lark.js 并不是为快速开发设计的框架。lark.js 在设计上采用了路由,分层架构等拆分很细的设计,并且没有像 django 或 ror 一样自己实现一整套完整系统。这些不是lark.js 的重点关注目标。lark.js 的目标是支撑大流量大并发的业务,性能、多人开发模式、架构和可维护性是关注重点。

larkjs作为一个可支撑大流量并发业务的nodejs框架,在性能、多人开发模式、架构以及可维护性方面值得推荐。目前larkjs已在百度多个产品线落地使用,大家有兴趣的话,可以点击查看,下面这两个图我们整个项目的目录结构和分层架构:

React-router

react-router作为webapp的路由模块,提供了丰富的功能,调用非常简单,react-router对pushstate支持很好,视图切换可以直接p-ajax

编译部署

基于gulp和webpack,实现了一套编译工具,主要有两个命令,npm run devnpm run deploy

  • dev:监听所有文件变化,基于babel将es6编译成es5,基于webpack区分出lib.js(lib.js是底层代码,这个文件几乎是不变的)和app.js(这个是业务代码每次上线都会根据需求变化),编译less,并重启nodejs服务
  • deploy:主要是合并压缩js、css,并将这些静态资源文件md5打包,方便浏览器缓存

问题和踩坑

  • state需要在做项目之前设计好,保证一份业务数据在state tree中出现一次
  • smart组件太少导致state需要逐级下传。
  • onClick事件在大部分安卓手机上不可点

总结

百度妈咪特卖项目在技术选型上选取了前端领域最热门的框架组合,项目成功落地后,对使用这一技术实现的优缺点总结如下:
优点:
1. 通过服务端以及前端的技术选型,实现了前端后同构。 同一套react组件分别在前后端render,避免了白页loading态的出现。
2. 基于reactjs实现,除组件化、虚拟DOM在复用以及性能上带来的一般好处外,reactjs思想使得开发者之间更好的分工与合作,在配合上非常顺畅。
3. react+redux,规范的接口以及极强的约束,使得整个代码结构清晰,不同开发者的代码高度一致。
4. 技术生态。越来越多的开发调试工具以及JavaScript框架正在依附着react生长,这一技术选型对以后的产品升级以及客户端的开发上线打下了良好的基础。
5.如果你想基于react-native开发native项目,也需要学习reactjs

缺点:
1.学习成本略高。如果想基于reactjs开发项目,还得学习redux、react-router、es6等一系列比较前沿的技术。
2. 体积略大。这套技术实现,框架库代码压缩后大于200K,gzip后实际传输大小为60K+,更适合大型的webapp。

百度母婴技术团队—基于Reactjs实现webapp #1相关推荐

  1. 北京/上海/深圳内推 | 百度视觉技术团队招聘视觉/3D算法工程师

    来源:AI求职 百度 百度视觉技术部下属城市视觉感知(车辆.行人分析/3D 视觉技术)和产品工程化团队(视觉产品/工程架构),致力于城市视觉.3D 视觉技术的创新和 AI 产品落地工作.团队研发的智能 ...

  2. 各大集团技术团队社区-微软-阿里-腾讯-百度-美团

    百度AI社区:http://ai.baidu.com/forum/topic/list/169 阿里云栖社区:https://yq.aliyun.com/articles/ 美团技术团队:https: ...

  3. 百分点大数据技术团队:数据治理“PAI”实施方法论

    数据作为第五大生产要素,已逐渐成为政府和企业决策的重要手段与依据.面对数据多样化.数据需求个性化.数据应用智能化的需求,以及在2B和2G行业中数据质量参差不齐.数据应用难以发挥价值.数据资产难以沉淀等 ...

  4. 滴滴图像技术团队招聘计算机视觉工程师和专家

    滴滴图像技术团队基于滴滴积累的海量交通出行场景数据,研发各种视觉感知.识别和理解技术,包括人脸识别.光学字符识别.目标识别和视频理解等,并成功地将这些技术应用于司机服务质检.司乘安全.智慧交通等各个领 ...

  5. 百分点大数据技术团队:BI嵌入式分析实践

    编者按:近些年来,商业智能(BI)市场持续增长,随着企业CRM.ERP等应用系统的引入,企业越来越注重利用数据智能为高效决策提供支持,由此带动的对BI的需求也越来越大.BI嵌入式分析能够增强业务系统数 ...

  6. 【美团技术团队】2014年-2022年后端文章精选篇

    目录 2022年后端文章精选 2021年后端文章精选 2020年后端文章精选 2019年后端文章精选 2018年后端文章精选 2017年后端文章精选 2016年后端文章精选 2015年后端文章精选 2 ...

  7. 2021年美团技术团队最受欢迎的22篇技术文章

    再见2021 你好2022 「美团技术团队」微信公众号祝大家新年快乐!温故而知新,我们根据文章的「阅读量」和「在看」数,以及所覆盖的技术领域,精选了22篇技术文章作为新年礼物送给大家.希望在2022年 ...

  8. 百分点大数据技术团队:基于HugeGraph的知识图谱技术在白酒行业的落地实践

    编者按:信息化是企业在外部环境变化时保持核心竞争力的有力手段.在白酒企业信息化过程中,通过应用大数据.云计算等的新智慧营销方式,精准定位消费群体,将对中国白酒未来营销起到革命性作用. 在营销过程中,白 ...

  9. 淘宝 腾讯 百度 新浪 技术团队 博客

    From:http://blog.csdn.net/perfect2011/article/details/18844575 csdn lidp  http://blog.csdn.net/perfe ...

最新文章

  1. 欠阿里云一分钱,会是什么样的后果...
  2. 关于vivo 8.0和miui新系统android studio调试出现“包解析错误”的bug的解决办法
  3. mac 从终端打开应用程序
  4. Mistakes(Updating)
  5. VTK:vtkAnimationScene用法实战
  6. android复位机器人图片_Universal-Image-Loader 图片异步加载类库还不熟?
  7. Linux(Centos7) 设置静态IP
  8. 此设备不允许更改其写入高速缓存设置_优化SiT15xx驱动器设置32 kHz晶体输入低功耗MCU程序设计细节(一)...
  9. Eclipse打开报错解决方案
  10. 最简单的推荐系统实践
  11. 伺服驱动器cn1引脚定义_关于三菱驱动器CN1端口的接线-专业自动化论坛-中国工控网论坛...
  12. catia v5r18 百度云_CATIA V5 R18全套的教程.pdf
  13. go mysql报错Error 1406: Data truncation: Data too long for column ‘content‘ at row 1
  14. 分享 | 带来全新交互体验的『支付宝AR』技术大解密
  15. HCTF writeup(web)
  16. LGWR waits for event ‘DLM cross inst call completion’ 故障排除
  17. python实现渐变图像
  18. 计算机word2003试题,计算机应用基础Word2003试题新
  19. Oracle-高效分页
  20. pd.DataFrame()快速筛选数据

热门文章

  1. 计算机组成原理答案郑秋梅,计算机组成原理-郑秋梅_习题.docx
  2. xshell 安装yum_Xshell上面简单安装docker
  3. 服务器网站目录,服务器网站目录
  4. C++字符串详解(三) 字符串的增删改
  5. 149. Leetcode 1005. K 次取反后最大化的数组和 (贪心算法-基础题目)
  6. 112. Leetcode 673. 最长递增子序列的个数 (动态规划-子序列问题)
  7. 在其他数都出现偶数次的数组中找到出现奇数次的数
  8. Spider_douyin
  9. Mac~git学习和应用需要注意的几个点
  10. 从无到有算法养成篇-栈和队列·栈