Upgrade to Pro — share decks privately, control downloads, hide ads and more …

react at alipay

Avatar for yiminghe yiminghe
April 03, 2015

react at alipay

react at alipay

Avatar for yiminghe

yiminghe

April 03, 2015
Tweet

More Decks by yiminghe

Other Decks in Technology

Transcript

  1. 支付宝前端架构   •  2012  ~  2014   – seajs  &  arale2

      •  2014  ~       – react  &  roof  
  2. 2012  ~  2014   •  技术特点   – 基于浏览器动态加载的模块化   • 

    url  combo   •  build   – 基于  jQuery  面向  DOM  的编程方式   •  初步的组件编写规范   – 提供细粒度的基础模块支持  
  3. 2012  ~  2014   •  mvc  组件   – Model:  attrs

      – View:  handlebars   – Control:  events  
  4. 问题   •  浏览器端加载逻辑过重   –  无法语义化版本   •  组件机制不完善

      –  模版与局部刷新   –  组合性   –  和  DOM  节点的结合   •  流行功能缺失   –  数据绑定   –  …   •  专有源不便与业界接轨  
  5. history •  react  2013.8  开源   •   人物   – 

    Jordan  Walke  @jordwalke  第一版,目前 react-­‐ naEve.  G   –  Pete  Hunt  @floydophone  早期开源版本贡献者.  ig,G   –  SebasEan  Markbåge  @sebmarkbage  目前主力,决策 制定.  G  tc39   –  Paul  O’Shannessy  @zpao  PM.  Fb   –  Tom  Occhino  @tomocchino  manager
  6. React   •  Component   – jsx   – Virtual  DOM  

    – Life  cycle   •  Flux   •  Isomorphic  javascript  
  7. Component   •  Jsx   •  扩充  es6   PrimaryExpression

     =>  JSXElement   JSXAttributeValue  =>  {  AssignmentExpression  }   JSXChild  =>  {AssignmentExpression    }  ||  JSXElement   JSXChildren  =>  JSXChild  JSXChildren    
  8. Virtual  dom   •  化动为静,可预测   – 某一时刻的状态对应于确定的虚拟  dom  表示  

    – 避免人肉追踪随时间而产生得  dom  局部变化   •  框架负责经可能高效得在虚拟  dom  和原生   dom  间同步   •  *  抽象层和具体实现脱离,底层可切换为   canvas/svg/native/dom  
  9. Life  cycle   •  在组件的不同生命周期会调用不同的组件 函数   •  初次创建时  

    – constructor      //  server  and  client   – componentWillMount  //  server  and  client   – render    //  server  and  client   – componentDidMount  //  client   – componentWillUnmount  //  client  
  10. Life  cycle   •  组件更新     – 父组件重新渲染该组件   – 本身

     setState   •  函数调用顺序  (client)   – componentWillReceiveProps   – shouldComponentUpdate   – componentWillUpdate   – render   – componentDidUpdate  
  11. flux   •  Single-direction  data  flow  application   pattern  

    – Action   – Dispatcher   – Store   – View  
  12. Isomorphic     •  服务器端渲染   –  React.renderString   • 

    逻辑共享   –  UI  无关的业务逻辑   –  Router  路由   –  Validator  验证   –  Data  model  数据模型   •  前后端一致的开发模式  
  13. react-component   •  基础设施   –  加载  npm  模块  

    –  代码检测   –  测试,覆盖率,示例页面/脚手架自动生成   –  travis,  saucelabs  支持   •  目录结构   –  assets:    less  源码   –  examples:  组件示例   –  lib:  commonjs  源码   –  tests:  测试代码  
  14. lib   •  源码示例   – es6:  动态转化为  es5  到浏览器执行,通过  

    sourcemap  支持源码调试   – require  node_modules  模块  
  15. 组件开发的一点经验   •  职责清晰   •  扁平访问   •  避免信息冗余

      •  概念一致   •  标签化   •  避免使用  ref  
  16. 技术栈 •  server:  chair(koa)   •  生态圈/源:  tnpm(npm)   • 

    组件:  react-­‐component(react)   •  应用架构:  flux   •  工具:  webpack  
  17. 部署   •  使用  webpack  进行  build   – 每个页面打包出一个  css

     一个  js,不依赖浏览 器端  loader   – 通过  sourcemap  可以在线调试源码    
  18. 部署 •  Webpack  的一些其他特性   –  排除公共库的打包,react,jquery  可以单独引   – 

    通过定义常量,将开发中的  log  在线上删除   •  if(__DEV__)  {  console.log(‘xxx’)  }   –  抽取多页面的公用依赖模块为单独 js,加强跨页面 缓存   –  将按需加载的模块打包成单独的 js,按需加载
  19. 总结 •  组件化开发   –  越细越好   •  中央数据模型  

    –  易于理解   •  前后端一致的开发模式   –  基于  npm  包管理   –  js  为中心   –  项目代码独立  (业务同组件整体打包)   •  不适合?   –  复杂动态场景(店铺装修?)  
  20. 展望   •  tnpm   •  alipay  roof   • 

    Isomorphic     •  react-art   •  react-native  
  21. tnpm   •  Private  package   – @alipay/xx   •  npm

     package   – 同步自  npm,内网速度快   •  快速拼装收银台应用  
  22. Isomorphic   •  同构  javascript   – 通过 react-­‐router  共享路由  

    – 通过 fluxible  共享  store   – 通过  alipay  roof  共享模型与验证   – 通过  react  共享渲染
  23. react-­‐art •  用标签化来实现 canvas  与 svg   •  Svg  

    – Pro:  结构化易理解,支持事件   – Con:  性能   •  Canvas   – Pro:  性能高   – 非结构化,无事件   •  react-­‐art:  svg+canvas  
  24. Ref •  React:  hep://facebook.github.io/react   •  React-­‐component:   heps://github.com/react-­‐component  

    •  Learning-­‐react:   heps://github.com/yiminghe/learning-­‐react   •  react-­‐webpack-­‐chair:   •  hep://gitlab.alibaba-­‐inc.com/chengyu/chair-­‐ react-­‐webpack