个人整理的前端架构图谱,之后会根据这个图谱不断的完善内容。希望这个图谱可以对开发同学的知识脉络有个梳理的作用。
相关图谱文件已上传至Github:https://github.com/sahadev/front-end-architecture,后续将不定期更新。
2020年02月28日已更新。
IDE脚手架
IDE或社区提供的脚手架
业务型脚手架
根据业务特点通过Node写的工具,用于降低高频手写操作
项目分层组件
错误数据采集
业务代码与运行时框架隔离
网络访问封装与管理
数据存储封装与管理
日志统一收集
社区推荐组件
https://ice.work/docs/guide/resource/npms
UI组件
Element UI
Echart
IView
Vant
https://youzan.github.io/vant/?source=vuejsorg#/en-US/
飞冰
极速构建企业级中后台前端应用
https://ice.work/
海量物料
优势在于拥有强大的物料:
涵盖:模板、区块、业务组件、基础组件
可以通过拖拽快速组合各种页面。
使用React开发,拥有特定的IDE,裁剪自VSCODE,这些组件目前还不能预览
iceworks 内置了 ICE 官方模板帮助您快速创建一个中后台应用,并提供了 SCM 的支持(强大的 Git 集成)以加速发布操作。iceworks 还支持对接应用发布平台
后台管理系统
快速预览:https://unpkg.com/@icedesign/[email protected]/build/index.html#/dashboard/monitor
当项目庞大,单页面冗长,需要多团队开发时,可以考虑:icestark
编码规范
Airbnb JavaScript Style Guide
https://github.com/airbnb/javascript
规范检查
配合ESLint执行
自动格式化
提交代码仓库时根据规范自动进行调整
按照团队统一的相关格式进行格式化,使提交到仓库的代码风格都是一致的
husky
https://github.com/typicode/husky#supported-hooks
https://git-scm.com/docs/githooks
分支管理
Git Flow
线上分支
该分支的最后一次commit总是目前生产环境所运行的稳定版本
开发分支
所有的子分支都是从该分支检出
该分支的状态永远不落后于线上分支
功能性开发分支
根据人员与功能所划分的功能版本开发分支
命名方式可以为:
分支类型/日期-姓名-功能
例如:
feature/20200202-Jim-performance-improve
统一测试分支
有效利用小程序体验版只有一个的缺点
与测试分支相配合的还需要支持一个版本可以随时切换环境
这种特点在并行开发时效果尤为明显
根据业务特性编写的脚手架
可以通过CLI的方式生成常用的小程序页面,并直接提供固定的页面模板与常用的页面模板,减少重复量,加速开发
Yeoman
https://yeoman.io/
代码一键生成
较为通用的前端解决方案,例如:HtmlFindClass
业务组件一键生成
与业务有强相关性,需要结合业务特点专门建造此类工具
目标环境代码转换(Babel)
文件变更监控
编译结果缓存
缩短单次编译时间,避免不必要的资源浪费,提升开发效率
编译/打包工具
开发数据自动生成
根据接口的数据接口自动生成测试数据
Mock.js
http://mockjs.com/
随机数生成
Chance
https://chancejs.com/
Mock平台
RAP2
http://rap2.taobao.org/
https://github.com/thx/rap2-delos
easy-mock
Api-mocker
eoLinker
fastmock
https://www.fastmock.site/#/
Mock.js
http://mockjs.com/
Html
CSS
SASS/SCSS
LESS
POSTCSS
https://postcss.org/
JS/TS
打包工具
NPM
YARN
CNPM
淘宝出品的npm镜像,很快
TreeShaking
Tree-shaking, 也被称为 “live code inclusion,” 它是清除实际上并没有在给定项目中使用的代码的过程,但是它可以更加高效。词汇来源查看https://medium.com/@Rich_Harris/tree-shaking-versus-dead-code-elimination-d3765df85c80#.jnypozs9n
uglify
csso
平滑发布
增量发布
部署工具/系统
Walle
https://walle-web.io/
Jenkins
https://jenkins.io/
根据服务的用户环境预先生成各种运行时版本,依据环境获取对应的版本代码,例如通过Pollfill
极大缩短部署步骤与时间
surge
http://surge.sh/
参考本架构部署示例:http://wooden-process.surge.sh/
github pages
https://pages.github.com/
netlify
https://www.netlify.com/
几部就可以完成代码部署
支持与Github,Gitlab强关联,可以读取仓库的分支,自定义配置编译脚本,非常方便,支持环境变量配置
DigitalOcean
https://www.digitalocean.com/
主链路测试(针对高频使用/功能复杂的模块)
接口自动化测试
可以对各类环境进行配置性测试
接口串行测试
接口性能测试
⾃动化测试沙盒
通过模拟微信⼩程序运⾏环境和基础库 API,将⼩程序的运⾏和测试脱离微信环境,从⽽⽅便地对其进⾏⾃动化测试。最后通过拦截setData 接⼝及判断当前⻚⾯路由,对⼩程序运⾏结果进⾏校验
单元测试框架
Chai Assertion Library
用于JS测试的测试框架:https://www.chaijs.com/
lint类工具
包含版本回退能力
https://mp.weixin.qq.com/s/IT65m3VwlAhXusipB6wa2g
https://mp.weixin.qq.com/s/HtxkwEVm8f1Ur1Il6JmEYQ
分函数级与业务级
CAT
https://github.com/dianping/cat/
运行时性能数据采集
代码编译时长数据采集
小程序包体积数据采集
接口响应时长数据采集
页面打开速度数据采集
应用实时监控服务 ARMS
https://www.aliyun.com/product/arms
流量感知、HSF/HTTP触发器、限流
Sitespeed.io
https://www.sitespeed.io/
性能测试
Browsertime
https://www.sitespeed.io/documentation/browsertime/introduction/
What is Browsertime good for?
It is usually used for two different things:
You run it as a standalone tool to collect performance timing metrics of your web site.
You integrate it in your tool as a JavaScript runner that collects whatever JavaScript metrics/information you want.
性能数据比较
网站监控
首屏渲染时长
首屏响应时长
资源缓存
https://www.cnblogs.com/laixiangran/p/8971119.html
资源压缩
单文件最小可运行单元,缩减空格与分号等
文本压缩
图像压缩
资源合并
多类资源合并为单个的Html/Css/Js,降低http链接次数与时间
资源裁剪
缩减为首屏所需最小代码量
CDN静态资源加速
HTTP2
权重
多路复用
减少TCP握手时间
HTTPS安全加密
无需等待
必要情况下,可以直接发送数据包,不需要等待缓存队列满的条件
服务器推送
头部压缩
https://link.jianshu.com/?t=https%3A%2F%2Fimququ.com%2Fpost%2Fheader-compression-in-http2.html
缓存及版本管理
最近访问节点
负载均衡
预热
容灾
SSR
Server Side Render 服务侧渲染,有效降低网络传输时间,并且可以对渲染结果实施缓存策略,加速客户端呈现时间
Rax SSR
https://rax.js.org/ssr
流量分析
查看全站流量状况,与历史进行比较,是涨是跌,哪个时段出了问题?出了问题需要排查。
关注实时流量,如直播网站,趋势分析无法满足需要看当前在线。
来源分析
来源分哪几类,分别带来多少流量?
搜索引擎、外链的引入流量具体状况如何?
受访分析
网站哪些内容受欢迎??
页面设计是否合理?
访客分析
访客都是谁?
访客的浏览行为是怎样的?
转化路径分析
路径分析:根据您设置的特定路线,监测某一流程的完成转化情况,算出每步的转换率和流失率数据,如注册流程,购买流程等。
Auto DevOps provides pre-defined CI/CD configuration which allows you to automatically detect, build, test,
deploy, and monitor your applications.
持续集成(Continuous Integration)
持续交付(Continuous Delivery)
持续部署(Continuous Deployment)
https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/
https://mp.weixin.qq.com/s/k16SjTN7__iRB_7q78hldg
Gitlab
自动构建
自动测试
代码质量分析:
https://docs.gitlab.com/ee/user/project/merge_requests/code_quality.html
自动部署
自动性能测试
自主监控
Code Review
https://about.gitlab.com/stages-devops-lifecycle/code-review/
Review Apps
https://docs.gitlab.com/ee/ci/review_apps/index.html
通过Node.js实现的网关层,可以整合各服务网关数据,实现按需配置请求,减少网络等待时间,加快网络请求时长,降低开发成本,在大型复杂的应用中效果尤为明显
按需获取数据常见的两种方案:
1.中台化服务
2.GraphQL
应该多关注稳定性,容灾容错,弹性,监控告警等
js-beautify
https://github.com/beautify-web/js-beautify
SSL
SSL, or Secure Sockets Layer, is the industry-standard technology for establishing an encrypted link between a web server and a browser.
https://github.com/Leaflet/Leaflet.heat
Demo1:
http://leaflet.github.io/Leaflet.heat/demo/
Demo2:
http://leaflet.github.io/Leaflet.heat/demo/draw.html
https://threejs.org/
EverCraft
https://evercraft.co/zh/api
For Web, Android, iOS, React Native, and Windows
Lottie is a mobile library for Web, and iOS that parses Adobe After Effects animations exported as json with Bodymovin and renders them natively on mobile!
https://github.com/airbnb/lottie-web
http://airbnb.io/lottie/#/
https://rax.js.org/
H5
Weex
阿里小程序
微信小程序
http://www.ruanyifeng.com/blog/2016/04/cors.html
非简单请求在发起请求前会发起预检,执行Opions的请求,如果预检通过,则本次生命周期内不会再进行预检
https://ice.work/docs/guide/resource/tools
Sketch设计辅助工具
XMind: ZEN - Trial Version