架构演进与架构师¶
前端架构升级之路¶
架构演进总览¶
- PC时代 -> 移动时代 -> 智能时代
前端技术发展轨迹¶
- 后端MVC模式 + 前端静态页面
-
Ajax 技术:前后端分离 + 前端MVC框架
- Ajax (Asynchronous Javascript And XML)技术出现,标识前端从 Web1.0 到 Web2.0 的重要演进
- Backbone: 第一个前端MVC框架
-
前后端分离 + 前端MVVM框架
- MVVM 特点:双向数据绑定或自动渲染更新
- 简化数据与视图的依赖
- 解决数据频繁更新的问题、虚拟DOM理念
-
前后端分离 + SPA 单页面应用
-
NodeJS技术: 前后端同构 + SSR
- Vue/React/Angular 三足鼎立, NodeJS 打破前端技术体系
-
前端实现BFF层
- 前端工程师可以自行编写后端服务,实现数据的适配(接口编排、字段裁剪)
- 前端工程师可以实现SSR(服务端渲染)技术
- 前端工程师可以实现后端各种领域服务
-
Vue/React 推出同构方案:SSR 架构模式
-
Serverless: 前端向后工程化、基础设施完善的开发体系
- Serverless 理念解决问题:前端(NodeJS)无需关注服务器的运维、部署、发布、监控。
- 将服务器的运维功能交给Serverless平台进行管理;
- 研发人员只专注于实现云函数,即可完成功能开发。
里程碑(代表性技术)¶
- 数据源聚合和字段裁剪方案(GraphQL技术)
-
UI 搭建技术(组件化架构)
- 组件化方法(原子组件)
- 一体化组件方案(模版库)
- 配置化解决方案(Low code/No code)
- 搭建方案(机器学习智能化)
-
单体应用的工程方案
- 微前端:前端应用聚合
-
平台化方案
- PWA
- 小程序
- 快应用
-
移动端跨端方案
- PhoneGap
- Ionic
- React Native
- Flutter
现代化的前端技术架构¶
-
当前背景
- 始终无法脱离对应终端和宿主依赖
- javascript 已发展成为成熟语言,还会引入新的特性和功能:TypeScript、Elm、PureScript、ReasonML
- 前端的用户体验和富媒体技术愈发成为应用关键
-
技术方向特点
- 1、组件化 是基本的UI架构模式
- 2、依托于SSR同构渲染技术以及心智负担的最小化
- 3、数据状态管理方案将会以职责单一、minimal necessary 为目标:以 组合式函数 为理念;而不以双向数据流、单向数据流的区分为重点。
- 4、前端向传统后端领域进军是必然,CSR/SSR可切换的协作方案
渲染方案演进视角¶
-
CSR
-
CSR渲染流程
- 1) Server Sending Response to Browser
- 2) Browser Downloads JS
- 3) Browser executes React/Vue
- 4) Page Now Viewable and Interactable
-
CSR渲染架构特点
- 实现了前后端架构分离,实现前后端职责分离
- TTFB 时间最小,FCP/FMP 时间不理想
-
图:fe-csr-time
-
-
SSR
-
SSR渲染流程
- 1) Server Sending Ready to be rendered HTML Response to Browser
- 2) Browser Renders Page, Now Viewable, Browser Downloads JS
- 3) Browser executes React/Vue
- 4) Page Now Interactable
-
图:fe-ssr-time
-
基于hydration(注水) 的 SSR 和 CSR 的结合方案
- hydration(注水阶段):与同构应用中数据的获取和消费相关
- dehydrate(脱水阶段):在服务端返回 HTML 字符串的时候,将数据 JSON.stringify 一并返回
-
流式SSR渲染(Streaming SSR)
- 允许服务端通过Stream的方式,向浏览器发送HTML内容
-
执行流程:理想情况仅发送两个请求
- 1)请求HTML:Server 先返回骨架屏的HTML,再返回所需数据或带有数据的HTML,最后关闭请求。
- 2)请求 JS:JS 返回并执行后就可以交互。
-
为什么要叫“流式服务端渲染”?
- 因为返回HTML的那个请求的响应体是流(stream);
- 流会先返回如骨架屏/Fallback的同步HTML代码;再等待数据请求成功,返回对应的异步HTML代码;都返回后,才会关闭此HTTP连接。
-
渐进式SSR渲染(Progressive SSR)
- 允许在hydrating没有完全结束前,部分已渲染并完成注水的页面内容,可以优先完成交互响应
-
-
NSR
- 通过 Native 渲染生成 HTML,并缓存在客户端
- NSR 把 SSR 的渲染工作放在一个个独立的移动设备中;并利用离线存储技术,实现了页面的预加载,同时又不会增加额外的服务端压力。
-
ESR
- 边缘渲染,借助了最近比较火的 “边缘计算” 能力。
-
边缘计算
- 是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。
- 其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求
- 边缘计算处于物理实体和工业连接之间,或处于物理实体的顶端。而云端计算,仍然可以访问边缘计算的历史数据
-
ESR 在 CDN 上缓存页面的静态部分,当用户访问页面时可以快速返回给用户静态内容。
- 同时,在CDN节点上也发起动态内容请求,在动态内容获取后,利用流的方式,继续返回给用户。
像架构师一样思考¶
架构师职责¶
- 负责架构设计和核心开发、工程方案调研和选型、团队管理和人才梯队建设。
架构师思考题¶
- 如何打造顺滑的工程化流程,提升研发效率?
- 如何建设稳定可靠的基础设施,保证业务产出?
突破技能瓶颈¶
- 背景:前端技术有着与生俱来的混乱,也有与之抗衡的规范。
-
Bad Case
- 短平快、碎片化内容;
- 暂时缓解前端学习焦虑的精神鸦片。
-
“好项目”
- 1)从0到1打造应用的基础建设
- 2)制定应用的工程化方案
- 3)实现应用的构建和发布流程
- 4)设计应用中的公共方法和底层架构
架构师必备技能¶
- 团队不同于单打独斗,如何设计工作流程,如何打造一个众人皆赞的项目根基?
- 项目依赖错综复杂,如何做好依赖管理和公共管理?
- 如何深入理解框架,做到精通框架原理和技术选型?
- 从最基本的网络请求库说起,如何设计一个稳定灵活的多端 Fetch 库?
- 如何借力Low Code/No Code,实现智能化应用搭建方案?
- 如何统一中后台项目架构,实现跨业务线的产品研发效率提升?
- 如何开发设计一套适合业务的组件库,封装分层样式,最大限度的复用性,提升开发效率?
- 如何制定跨端方案,Write Once,Run Everywhere 是否真的可行?
- 如何处理各种模块化规范,以及精确做到代码拆分的最佳实践?
- 如何区分开发边界,如何更好的利用NodeJS方案开疆拓土?