GMTC2018《Hulu基于React的框架演进》 程墨

2020-02-27 239浏览

  • 1.Hulu基于React的框架演进 程墨 Morgan Cheng Hulu Senior Engineer
  • 2.
  • 3.
  • 4.关于我 程墨Morgan
  • 5.关于Hulu
  • 6.目录 • Hulu网站技术背景和挑战 • 自创基于React的框架 • 应用react-server的教训 • 迁移至next.js的历程 • 总结
  • 7.• Hulu网站技术背景和挑战 • 自创基于React的框架 • 应用react-server的教训 • 迁移至next.js的历程 • 总结
  • 8.历史遗留技术栈
  • 9.多个Web应用共同存在 Browse Account Signup ...
  • 10.需要一个框架!
  • 11.框架提供支持 Browse Account Signup … 框架
  • 12.框架也要施加约束 Browse Account Signup … 框架
  • 13.• 支持多应用 • 施加约束 • 统一的UI库 框架的要求
  • 14.如何选择UI库
  • 15.是否选择同构?
  • 16.CSR 服务器产生HTML 下载JavaScript React渲染 网页可交互
  • 17.SSR 服务器产生HTML 下载JavaScript React渲染 网页可交互
  • 18.• Hulu网站技术背景和挑战 • 自创基于React的框架 • 应用react-server的教训 • 迁移至next.js的历程 • 总结
  • 19.网页 Node.js
  • 20.网页 Node.js API
  • 21.网页 Node.js Data API
  • 22.网页 Node.js Data API
  • 23.网页 Node.js Data API
  • 24.网页 Node.js Data API
  • 25.网页 HTML + 脱水数据 Node.js Data API
  • 26.脱水和注水
  • 27.如何在SPA中实现同构? 网页A SPA跳转 HTML + 脱水数据 Node.js Data 网页B API 纯数据
  • 28.• Hulu网站技术背景和挑战 • 自创基于React的框架 • 应用react-server的教训 • 迁移至next.js的历程 • 总结
  • 29.
  • 30.增量式渲染 Header Masthead Trays React Server增量式向浏览器推 送渲染的每部分
  • 31.React-Server Page • 利用Promise管理数据 • Page和React无关 • RootElement可以被增 量渲染
  • 32.React Server的同构 网页 HTML HTML + API req/res pair 仅req/res pari中无缓存才直接访问API Node.js Data API
  • 33.使用React Server的教训 • 浏览器服务器必须访问同一个API端口 • 难以定制 • API生命周期和页面生命周期相同
  • 34.• Hulu网站技术背景和挑战 • 自创基于React的框架 • 应用react-server的教训 • 迁移至next.js的历程 • 总结
  • 35.
  • 36.组件的两个生命周期 async get props props Page Component
  • 37.Next.js Page • Page就是React组件 • getInitialProps用于获 取外部数据 • 数据以props形式传递
  • 38.HoC Page + HoC = Enhanced Page
  • 39.SSR的理想实现 第一页服务器端渲染 单页应用跳转浏览器端渲染 The Fold 永远浏览器端渲染
  • 40.NoSSR The Fold 用NoSSR包裹
  • 41.NoSSR • 保持和React一致风格 • 组件不需要关心自身是 CSR还是SSR
  • 42.迁移至Next.js • 尽量保持对应用层接口的一致 • 保持两条平行branch开发 • 特定功能允许不同的设计
  • 43.• Hulu网站技术背景和挑战 • 自创基于React的框架 • 应用react-server的教训 • 迁移至next.js的历程 • 总结
  • 44.React组件模型是一种交流方式
  • 45.构建框架的原则 • 框架必须施加约束 • 框架必须提供灵活度 • 没有完美的框架,持续改进
  • 46.
  • 47.
  • 48.
  • 49.谢谢 Emailme:morgan.cheng@hulu.com