前端应用开发架构图谱

个人整理的前端架构图谱,之后会根据这个图谱不断的完善内容。希望这个图谱可以对开发同学的知识脉络有个梳理的作用。

相关图谱文件已上传至Github:https://github.com/sahadev/front-end-architecture,后续将不定期更新。

2020年02月28日已更新。

在这里插入图片描述

项目创建

脚手架

  • IDE脚手架

    IDE或社区提供的脚手架

  • 业务型脚手架

    根据业务特点通过Node写的工具,用于降低高频手写操作

通用组件

  • 项目分层组件

    • 错误数据采集

    • 业务代码与运行时框架隔离

      • 安全性兼容: setData
      • API访问缓冲: setData
    • 网络访问封装与管理

      • 访问主机运行时变更
    • 数据存储封装与管理

    • 日志统一收集

  • 社区推荐组件

    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/pro-scaffold@3.0.15/build/index.html#/dashboard/monitor

      当项目庞大,单页面冗长,需要多团队开发时,可以考虑:icestark

编码

多人协作

  • 编码规范

    • Airbnb JavaScript Style Guide

      https://github.com/airbnb/javascript

    • 规范检查

      配合ESLint执行

      • eslint
      • tslint
      • stylint
      • commitlint
    • 自动格式化

      提交代码仓库时根据规范自动进行调整
      按照团队统一的相关格式进行格式化,使提交到仓库的代码风格都是一致的

      • 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/

组件化

  • 业务组件
  • UI组件
  • 基础组件

自动编码工具

  • 代码一键生成

    较为通用的前端解决方案,例如:HtmlFindClass

    • HtmlFindClass
  • 业务组件一键生成

    与业务有强相关性,需要结合业务特点专门建造此类工具

编译

  • 目标环境代码转换(Babel)

  • 文件变更监控

  • 编译结果缓存

    缩短单次编译时间,避免不必要的资源浪费,提升开发效率

  • 编译/打包工具

    • Webpack
    • Rollup
    • Gulp
    • Grunt

Mock

  • 开发数据自动生成

    根据接口的数据接口自动生成测试数据

    • 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/

调试

  • 控制台
  • 网络
  • 存储
  • DOM

IDE

  • VS Code
  • WebStorm

语言

  • Html

  • CSS

    • SASS/SCSS

    • LESS

    • POSTCSS

      https://postcss.org/

  • JS/TS

包管理

  • 打包工具

    • NPM

    • YARN

    • CNPM

      淘宝出品的npm镜像,很快

运行时框架

  • Vue
  • React

版本发布

代码压缩

  • 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

Html托管服务

极大缩短部署步骤与时间

  • 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

Faas网关

流量感知、HSF/HTTP触发器、限流

语言执行加速

  • WebAssembly

性能监控与测试

  • 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

      • expires
      • cache-control
      • Etag
      • Last-Modified
    • 资源压缩

      单文件最小可运行单元,缩减空格与分号等

      • 文本压缩

        • Gzip
      • 图像压缩

        • 矢量图
        • 光栅化
        • 有损/无损压缩
        • Tinypng
    • 资源合并

      多类资源合并为单个的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

数据统计

手工埋点

无痕埋点

业务数据指标

  • PV/UV
  • 漏斗数据
  • 渠道转化

用户行为数据

  • 流量分析

    查看全站流量状况,与历史进行比较,是涨是跌,哪个时段出了问题?出了问题需要排查。

    关注实时流量,如直播网站,趋势分析无法满足需要看当前在线。

  • 来源分析

    来源分哪几类,分别带来多少流量?

    搜索引擎、外链的引入流量具体状况如何?

  • 受访分析

    网站哪些内容受欢迎??

    页面设计是否合理?

  • 访客分析

    访客都是谁?

    访客的浏览行为是怎样的?

  • 转化路径分析

    路径分析:根据您设置的特定路线,监测某一流程的完成转化情况,算出每步的转换率和流失率数据,如注册流程,购买流程等。

社区解决方案

  • 友盟
  • 阿里云

DevOps

Auto DevOps provides pre-defined CI/CD configuration which allows you to automatically detect, build, test,
deploy, and monitor your applications.

CI/CD

持续集成(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中间件

通过Node.js实现的网关层,可以整合各服务网关数据,实现按需配置请求,减少网络等待时间,加快网络请求时长,降低开发成本,在大型复杂的应用中效果尤为明显

按需获取数据常见的两种方案:
1.中台化服务
2.GraphQL

应该多关注稳定性,容灾容错,弹性,监控告警等

逆向分析

JS

  • 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

three.js (3D)

https://threejs.org/

商业解决方案

  • EverCraft

    https://evercraft.co/zh/api

Lottie (动画)

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/#/

跨平台开发

Rax

https://rax.js.org/

  • H5

  • Weex

    • Android
    • iOS
  • 阿里小程序

  • 微信小程序

Electron

跨域

http://www.ruanyifeng.com/blog/2016/04/cors.html

简单请求

  • HEAD
  • GET
  • POST

非简单请求

非简单请求在发起请求前会发起预检,执行Opions的请求,如果预检通过,则本次生命周期内不会再进行预检

  • PUT
  • DELETE

常用工具推荐

https://ice.work/docs/guide/resource/tools

FusionCool

Sketch设计辅助工具

React Developer Tools

Charles

Postman

Octotree

XMind: ZEN - Trial Version

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

丹琦女神新作:对比学习,简单到只需要Dropout两下

文 | 花小花Posy上周把 《对比学习有多火?文本聚类都被刷爆了...》分享到卖萌屋的群里后,遭到了群友们一波嫌弃安利。小伙伴们表示,插入替换的数据增强方式已经Out了,SimCSE才是现在的靓仔。snowfloating说:看完Danqi …

美团点评移动端基础日志库——Logan

背景 对于移动应用来说,日志库是必不可少的基础设施,美团点评集团旗下移动应用每天产生的众多种类的日志数据已经达到几十亿量级。为了解决日志模块普遍存在的效率、安全性、丢失日志等问题,Logan基础日志库应运而生。 现存问题 目前&#xf…

论文浅尝 - ACL2020 | Segmented Embedding of Knowledge Graphs

来源:ACL2020链接:https://arxiv.org/pdf/2005.00856.pdf摘要知识图谱的嵌入愈发变成AI的热点之一,对许多下游任务至关重要(如个性化推荐、问答等)同时,此模型强调两个关键特性:利用足够多的特征…

【论文翻译】HeteSim:异构网络中相关性度量的通用框架

原文链接:https://blog.csdn.net/Mrong1013967/article/details/115330139 HeteSim:异构网络中相关性度量的通用框架 摘要 相似性搜索是许多应用中的一个重要功能,它通常侧重于度量同一类型对象之间的相似性。然而,在许多场景中&a…

LeetCode 234. 回文链表(快慢指针+链表反转)

1. 题目 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false示例 2: 输入: 1->2->2->1 输出: true进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode) 链接&a…

随机/线性颜色生成器(RandomColorGenerator)

最近在实现https://javascript30.com/的课程,其中有一门课程要求利用Canvas实现一个效果,我发现这个效果其中的颜色是线性生成的。结合我之前已经写过一个随机颜色生成器,就想将这个随机颜色生成器写出来,作为一个工具使用&#x…

美团点评运营数据产品化应用与实践

背景 美团点评作为全球最大的生活服务平台,承接超过千万的POI,服务于数量庞大的活跃用户。在海量数据的前提下,定位运营业务、准确找到需要数据的位置,并快速提供正确、一致、易读的数据就变得异常困难,这些困难主要体…

NAACL’21 | 来看如何让模型学会因为所以但是如果

文 | Eleanor 编 | 戏有一些标准考试那是真的难,难到能分分钟教你做人。对于留学党来说,申请法学博士需要 LSAT 考试成绩、申请商学院需要 GMAT 考试成绩。这些标准考试到底有多难,大概考过的都懂8(嘤嘤嘤_(:з」∠)_)…

领域应用 | 知识计算,华为云赋能企业知识化转型

本文转载自公众号:华为云AI。从计算智能,到感知智能,再到认知智能,是业界普遍认同的人工智能技术发展路径。随着技术的演进,人工智能已经在"听、说、看"等感知智能领域达到或超越了人类水准,但是…

我在小程序工程化方面的一些实践

我在小程序工程化方面的一些实践 早期做小程序时,还是原始时代,项目结构混乱,各种冗余代码,每次迭代时由于高昂的维护成本,极为头疼。遂在一次次的更迭中完成了基础组件的初版,极为酸爽。从此之后在当时的…

LeetCode 430. 扁平化多级双向链表(DFS)

1. 题目 您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。 扁平化列表…

详解:多模态知识图谱种类及其应用

详解:多模态知识图谱种类及其应用 本文系统的讲述了一些关于多模态知识图谱的相关知识,作者介绍了一些重要的开源多模态知识图谱,基于百科多模态知识图谱Richpedia以及相关使用网站和多模态知识图谱的应用。>>加入极市CV技术交流群&am…

Android Hook技术防范漫谈

背景 当下,数据就像水、电、空气一样无处不在,说它是“21世纪的生产资料”一点都不夸张,由此带来的是,各行业对于数据的争夺热火朝天。随着互联网和数据的思维深入人心,一些灰色产业悄然兴起,数据贩子、爬虫…

论文浅尝 - ICML2020 | 跨域对齐的图最优运输算法

陈卓,浙江大学在读博士,主要研究方向为图神经网络和知识图谱表示学习。论文链接:https://arxiv.org/pdf/2006.14744代码:https://github.com/LiqunChen0606/Graph-Optimal-Transport发表会议:ICML 2020动机该论文的出发…

张俊林:对比学习研究进展精要

文 | 张俊林知乎对比学习(Contrastive Learning)最近一年比较火,各路大神比如Hinton、Yann LeCun、Kaiming He及一流研究机构比如Facebook、Google、DeepMind,都投入其中并快速提出各种改进模型:Moco系列、SimCLR系列、BYOL、SwAV…..&#x…

前端开发者的福音!通过拖拽就可生成Vue代码的平台来了!

Vue组件代码生成平台 Vue组件代码生成平台是一款面向Vue开发者的拖拽式组件代码生成工具。通过它可以快速搭建Vue组件的代码骨架结构。开发者可在此基础上进行二次开发。 目前该平台非常适合快速搭建一个常见的数据查询组件,仅需要拖三个组件进来即可完成&#xf…

LeetCode 523. 连续的子数组和(求余 哈希)

1. 题目 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。 示例 1: 输入: [23,2,4,6,7], k 6 输出: …

知识图谱简介

01 什么是知识图谱 我们可以从不同的视角去审视知识图谱的概念。 在Web视角下,知识图谱如同简单文本之间的超链接一样,通过建立数据之间的语义链接,支持语义搜索。 在自然语言处理视角下,知识图谱就是从文本中抽取语义和结构化的…

流量运营数据产品最佳实践——美团旅行流量罗盘

背景 互联网进入“下半场”后,美团点评作为全球最大的生活服务平台,拥有海量的活跃用户,这对技术来说,是一个巨大的宝藏。此时,我们需要一个利器,来最大程度发挥这份流量巨矿的价值,为酒旅的业务…

开源开放 | OMAHA 联合 OpenKG 发布新冠诊疗图谱数据

本文转载在公众号:OMAHA联盟。今年新型冠状病毒肺炎爆发期间,大数据、云计算、人工智能等新一代信息技术支撑着我国建立和健全疫情防控机制。知识图谱作为机器认知智能实现的基础之一,是人工智能的重要组成部分,在“抗疫”行动中赋…