Web/16-前端综合/01-2022年Web前端开发流程和学习路线(详尽版).md

948 lines
36 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 本文的最新内容,更新于 2022-06-27会在[GitHub](https://github.com/qianguyihao/Web/blob/master/17-%E5%89%8D%E7%AB%AF%E7%BB%BC%E5%90%88/01-2022%E5%B9%B4Web%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B%E5%92%8C%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%EF%BC%88%E8%AF%A6%E5%B0%BD%E7%89%88%EF%BC%89.md)上同步更新,欢迎 star。大家完全不用担心这篇文章会过时因为随着前端领域的技术更新本文也会随之更新。
## 前言
前端侧重于人机交互和用户体验,后端侧重于业务逻辑和大规模数据处理。理论上,面向用户的产品里,所有问题(包括产品、设计、后端、甚至看不见的问题)的表现形式,都会暴露在前端,而只有部分问题(数据问题、计算问题、安全问题等)暴露在后端,这就意味着前端起到了至关重要的承载和连接作用。
前端技术的更新日新月异;前端框架的技术选型百家争鸣;视觉审美的潮流不断更替;可视化效果酷炫无比;用户的运营体系逐渐精细化;适老化、无障碍化、青少年人群的诉求浮出水面;智能设备的升级和适配无穷无尽。所有的这一切,对前端领域和前端同学就一个要求:要折腾,爱折腾,反复折腾。
## 一、前端开发流程
### 需求评审
> 一般在做需求评审时PRD里只有交互稿尚未有视觉稿。需要在评审结束并达成一致后再输出视觉稿。
1、需求分析需求点逐一讨论、需求合理性、交互评审、逻辑梳理以及可能遗漏的部分。
提示:逻辑梳理的过程很花时间,贯穿开发始末。
2、涉及渠道/环境:
> 渠道和环境,往往是需求盲点,也是影响技术选型和开发进度的关键因素。
- AppApp原生页面、**App内嵌H5**、App内嵌小程序。
- 小程序:技术栈视角:小程序原生页面、**小程序内嵌H5**、App内嵌小程序。
- 普通H5微信H5、M站即普通浏览器环境
- B端运营管理平台等等
3、可行性分析是否有技术上的实现难点是否有其他的依赖条件。
数据来源:哪些是调接口,哪些是做成**可配置**,哪些是前端写死;可配置的部分,是前端读取,还是接口读取然后返给前端。提示:可配置的灵活性与风险正相关。
异常流设计容错、容灾、兜底、降级、回退机制、风险可控。prd一般只写了正常流的逻辑异常流往往需要研发同学配合做全盘考虑。
6、需求变更如有需求不明确、改需求、加需求、砍需求、加时间、改时间、加人力等等需要提前预判风险。
### 视觉评审
1、进度跟进**视觉稿是分批交付,还是一次性给到**?这是要首先考虑的。
按照历史经验前端项目进度的延误有一半的概率依赖于视觉稿的进度因为一个新页面的开发前端有30%~50%的工作在做页面构建。
2、视觉稿的文件格式
- Sketch 原型设计软件:.sketch 格式。一般用来画**视觉稿**。
- Figma 原型设计软件:.fig 格式。
- Axure 原型设计软件::.rp 格式。Axure 一般用来画**交互稿**。如果是输出高保真的视觉稿,推荐用 Sketch 或 Figma。
- Photoshop 软件: .psd 格式。专门做**图片处理**。当然有些CP外包人员的技能单一喜欢用PS输出视觉稿。
- Adobe Illustrator 软件简称AI软件.ai格式。制作矢量图。
- Adobe After EffectsAE 软件:.aep 格式。制作动画。
备注Sketch 是Mac平台独有的原型设计软件最为知名和常见。[Figma](https://www.figma.com/community/file/1038450359694759149) 是最近比较火的全平台原型设计软件,有取代 Sketch 的趋势。
【划重点】交付视觉稿时,需要视觉同学输出“**带尺寸标注**”的视觉规范文件。
3、检查需求是否覆盖需求和交互设计中的全部设计点。
4、检查视觉规范
- 样式和配色,是否符合页面和产品的整体风格。
- 尺寸规范移动端的视觉稿宽度是750px。
- 排版、对齐、一致性。推荐阅读书籍《写个大家看的设计书》,了解基本的设计原则。
- 字体字号大小一般是12px以上特别小的是10px以上、字重注意bold属性值为700以及有哪些**特殊字体**。尤其要注意字体的版权问题。
5、哪些图是前端构建哪些图是写死图片资源哪些是可配置可配置的图中需要把每个元素做拆解这个元素是合并到背景图中还是单独切图还是读取数据。
6、切图格式png透明格式、jpg
切图的图片大小不要太大。移动端的大图比如幕帘弹窗的背景图建议不超过50kb小图建议不超过20kb。图片在上传之前可以先在 https://tinypng.com/ 上进行压缩。
7、复杂图形、动画的实现难度和实现方式技术评估。详见接下来要讲的「技术选型」。
### 排期评估
1、排期一般包含这几个要素
- 开发时间:视觉构建时长、接口文档(接口协议)交付时间、前后端联调时间、自测时间
- 转体验时间
- 转测时间
- 上线时间(以及,需确认业务投放时间)
2、评估排期时**要根据视觉稿排期**不要根据交互稿排期。这是首先要强调的。一个新页面的开发前端有30%~50%的工作在做页面构建。 只看交互稿的话,无法评估真实的开发工作量。
3、前端开发工作包括概要设计、视觉构建、逻辑代码、前后端联调、自测、转体验。每一项都要单独拆解后评估时间加在一起就是整体的排期。
4、排期时要考虑其它的依赖因素比如视觉稿延期、需求不明确、接口进度、测试进度当然最重要的是上线进度。紧急项目经常是根据上线时间倒推开发排期。
5、即将进入开发阶段后与测试部门协调测试资源确认转测时间大型项目&重点项目,需要在需求评审阶段,提前知会测试部门,让其预留时间。
6、如果自己有在并行开发其他项目则排期时需要给自己预留 buffer。并行开发两个项目是家常便饭这个项目在测试时往往很难抽身去做别的项目因为会一直被测试童鞋牵制。
7、开发排期如果开发排期有变更需要立即周知其他相关人员尤其是要评估测试排期的风险。测试排期比开发排期 更难变更。
### 技术选型
> 技术选型千变万化,百家争鸣。这里需要列出你所在部门的常用技术选型,并非市面上的技术栈罗列。
1、页面开发框架
1多端页面小程序原生页面、H5
- [Taro 框架](https://taro-docs.jd.com/)(基于 React技术栈
注2有些业务一开始只做H5后来迭代时要求做小程序原生页面。这一点也要纳入需求评估。
2H5页面[Vue.js](https://v3.cn.vuejs.org/guide/introduction.html) 框架、React 框架
3App端
- Android端开发语言Kotlin、Java
- iOS端开发语言Swift、Objective-C
4B端开发UI框架
- React 技术栈:[Ant Design](https://ant.design/index-cn)简称Antd
- Vue 技术栈:[Element](https://element.eleme.cn/#/zh-CN)、[Ant Design Vue](https://antdv.com/components/overview-cn)
- 较简单的CSS响应式框架[Bootstrap](https://www.bootcss.com/)
5Node.js后端开发框架
- Koa新一代 Node.js 框架。
- [Egg.js](https://eggjs.github.io/zh/)Egg 是在Koa基础上进一步封装的企业级Web开发框架。
- Express比较老的Node.js 框架。
2、CSS预处理器SASS
3、复杂图形、动画的实现难度和实现方式技术评估
- gif 动图:尽量不用。因为文件太大,且效果模糊。
- CSS3 动画:适合简单的、有规律的动画。举例:[摆动的鱼](https://www.cnblogs.com/qianguyihao/p/8435182.html)、[京喜工厂](https://mp.weixin.qq.com/s/u5GHsA0vHz8A_MmGslRw2g)
- [Canvas](https://www.liaoxuefeng.com/wiki/1022910821149312/1023022423592576)Canvas 动画、小程序分享图采用 Canvas 绘制
- 3D动画[WebGL](https://www.zoo.team/article/webglabout)[Three.js](http://www.webgl3d.cn/Three.js/) 是 WebGL 的综合库)常见案例:太阳系
- 游戏框架Cocos 引擎
### 概要设计
- 需求背景及资源
- 风险评估
- 技术选型
- 项目结构设计
- 主要功能点逻辑设计
- 可扩展可复用设计
- 依赖接口
- 工作量拆解和排期
### 开发环节
1、代码设计
1目录结构设计、代码风格
2公共组件、工具类设计确保**可复用**、高内聚低耦合的原则。哪些可以复用京喜平台的公共组件,哪些需要自己单独写 components、utils。
3弹窗设计如果一个页面有多个弹窗建议先设计一个抽象的弹窗基类。**设计弹窗时,需要考虑的是**
- 设计原则:易扩展、复用性强
- 避免重复代码
- 避免同一时间出现多个弹窗
- 弹窗的位置要严格居中(不能因为屏幕尺寸的大小变了,导致弹窗位置不居中)
- 处理滚动穿透这个顽疾。
2、视觉构建
1后端在开发接口时前端做视觉构建视觉构建完成后前端根据接口文档的定义通过 mock 数据的方式调接口,写前端逻辑;待接口开发完成后,可进入前后端联调阶段。
2建议前端童鞋学会自己切图可控程度更高也能减少沟通成本。学会基本的 PS、Sketch操作就行做一名合格的前端切图仔。
3对于规则的样式和动画建议用代码实现而不是图片。图片会降低页面的打开性能且大屏都显示效果比较模糊。
4切图的尺寸要求100%宽度以 750px 为准。
5**像素级还原视觉稿**:推荐使用 [Snipaste](https://zh.snipaste.com/) 截图软件按F1截图F2贴图然后调整贴图的透明度为50%,将贴图与前端页面进行像素级比对。
3、业务逻辑实现
1建议先用**思维导图**,梳理业务逻辑,再着手写代码。思维导图有利于理清逻辑、事后复盘、高效给他人讲解,一目了然。重要的是思想,而不是用哪一款工具更酷。
2在调用接口时要明确前端自己的安全边界假设接口字段异常时前端需要有自己的降级措施不能完全依赖和信任字段导致让页面直接白屏、交互异常、甚至挂掉。
3除了完成产品要求的业务逻辑之外还要时刻考虑异常流的设计和容灾。
4很多前端童鞋在做需求时有个习惯是不喜欢细看prd只对着交互稿和视觉稿进行开发。这样做虽然省事但有三道手续不能少
- 开发前一定要再和产品童鞋过一遍prd细节
- 开发过程中,随时和产品童鞋反复沟通确认;
- 开发到80%时自己对照prd只字不差地阅读看看是否有遗漏的地方。
4、非功能性需求。业务代码写完后还有很多细节需要打磨。比如
- 不同渠道的分享场景
- 文案配置检查:运营配置端要做校验;是给产品运营用的,配置要尽量人性化。
- 添加埋点:曝光上报、点击上报、呼吸上报
- 监控上报、测试上报、badjs上报
- 重复代码精简
- 去掉 console.log、debugger 等多余的代码
- 图片、字体等静态资源压缩
- 常见的性能优化:骨架屏(按需)、图片懒加载、图片预加载、防抖节流、长列表*滚动*到可视区域动态加载
- 用户体验完善:返回定位、滚动穿透
- 屏幕适配
- 小程序代码瘦身
- 容灾演习
5、代码提交
- 先 git pull再 git push减少代码冲突。
- commit粒度要尽量细
- commit之前一定要diff代码确认每一行改动以免提交不必要的改动。
- Commit Message 常用格式feat、fix、docs、merge
- 如合并代码时遇到冲突,一定要先解决完冲突后再提交代码。如冲突部分涉及到其他人的代码,一定要找到对应同学一起解决。
6、自测
- 对照prd查漏补缺。
- 在真机上体验页面,而不是在模拟器上。
- 写一部分测试用例,加快后续的测试进度。前面梳理的思维导图,其实就是测试的最佳素材。
### 产品体验
1、在真机体验而不是在模拟器上。最好是 iOS和 Android 都要对比体验。
2、体验时记录整理各种 todolist
- 需求待确认 list一些小的、风险可控的需求点可以在体检阶段集中向产品童鞋提出。
- 开发未完成 list有哪些尚未完成的部分需要和产品童鞋交代清楚。
- 已知 bug list
- 体验问题 list边体验边记录产品反馈的问题并在稍后同步给测试童鞋。
- 依赖项 list接口、视觉切图、真实的测试环境等等。
### 代码评审/代码review
> 代码 review 可以在测试期间进行。
review顺序
- 业务核心逻辑
- 编码规范
- 关键位置、容易踩坑的地方,需要注释详细
- 系统保障(监控、容灾降级)
- 系统安全和风险
- 用户体验
### 视觉走查
> 视觉走查 可以在测试期间进行。
视觉童鞋都有像素眼,即便是一两个像素的区别,他们都能瞧出来。所以,建议前端童鞋加强自测,努力做到**像素级还原视觉稿**。
推荐前端童鞋使用 [Snipaste](https://zh.snipaste.com/) 截图软件按F1截图F2贴图然后调整贴图的透明度为50%,将贴图与前端页面进行像素级比对。
### 测试环节
1、建议加强自测质量。进入测试阶段后测试童鞋会进行一轮冒烟测试如果质量不合格将会被打回这就很尴尬了。
2、整理自测、测试、发布时需要的主流程checkList每次迭代时都能用上。
转测邮件的基本元素,包括但不仅限于:
- prd链接、视觉稿链接
- 页面链接
- 项目相关人员
- 数据配置系统
- host 代理
- 接口文档
- 概要设计、前端开发整理(如果有的话)
- 测试用例(如果有的话)
- 核心业务逻辑梳理(如果有的话)
- 体验问题列举
- 测试重点建议
- 风险点评估
3、测试童鞋提的bug单开发同学需要在 XX 小时内处理完成否则会被QA催。
4、需要控制bug单数量否则会被追责复盘。同类问题建议测试童鞋合并到同一个bug单中。
5、测试管理系统 是所有人处理bug 流程的平台不是让测试童鞋随便记录个人问题的。所以要提醒测试童鞋明确该问题是bug再提单不是bug要么不提要么在沟通后驳回。
### 发布方案
- 发布顺序:一般是先发后端,再发前端
- 依赖项是否准备就绪:配置的数据、配置项等
- 是否会对线上业务、线上数据造成影响
- 本地环境、dev环境、gamma环境均要做好验证。
- 回退机制
- 发布 checkList
### 上线确认
- 发布完成后,需要输出上线确认邮件
- 观察页面体验、页面性能表现
- 观察监控数据、业务调用量
- 总结复盘
## 二、前端工程化
### Git 版本管理
1、前端代码仓库 git 分支规范:
![](https://img.smyhvae.com/image-20220510164257833.png)
![](https://img.smyhvae.com/image-20220510164323243.png)
2、Commit Message 的格式只允许使用以下10种标识最常见的是 feat和 fix
- **feat:** 新功能
- **fix:** 修补 Bug
- **docs:** 文档
- **style:** 格式变更,不影响代码的运行
- **refactor:** 重构(既不是新增功能,也不是修改 bug 的代码变动)
- **test:** 增加测试
- **chore:** 构建过程或辅助工具的变动
- **up:** 不属于上述分类时,可使用此类别
- **merge:** 用于 merge branch需要手写 commit message 的情况
- **revert:** 用于撤销之前的 commit
3、业务分支命名规范建议一定加上日期
- 特性分支feature_xxx_YYMMDD
- 紧急bug修复分支hotfix_xxx_YYMMDD
- 小程序发布分支自动生成release_YYMMDD
### 代码规范
- 代码格式化Prettier
- 代码格式检查ESLint
### CSS预处理器
- SASS用得较多
- Less
- PostCSS
### 包管理
- 包管理工具npm最常见、yarn
- cnpm、nvm、nrm常用命令
### 编译构建
- webpack最常见
- Vite
- Gulp
- BabelES6语法转为ES5语法
### 小程序工程化
![图片](https://img.smyhvae.com/640.jpeg)
- [小程序工程化探索](https://mp.weixin.qq.com/s/_NSJTQ-4-8gTnwTVK-tn0A)
- [京喜小程序最佳实践:我是如何写超大型小程序代码的](https://mp.weixin.qq.com/s/tJN3Yz6usSt9LG37_pN7dw)
### 测试相关
- 编写测试用例代码
- 单元测试
- 自动化测试
## 三、前端核心知识
> 前端入门核心知识点
### 浏览器
- Web标准结构标准HTML、表现标准CSS、行为标准JS
- 浏览器分为两部分渲染引擎浏览器内核、JS 引擎
- 浏览器的工作原理重绘和重排、V8引擎
- App的WebView容器相当于浏览器可以内嵌H5网页
### HTML5
- 语义化标签:`<header>`、`<article>` 、`<footer>`等。
- 多媒体标签:`<audio>`、`<video>`
- 更强的本地存储能力和设备兼容性indexDB、HTML5 APP cookie
- 三维、图形及特效SVG、Canvas、WebGL
- 更有效的实时连接WebSocket、Server-Sent Events
- 无障碍体验
### CSS、CSS3
- CSS盒模型、BFC
- 浮动、定位(绝对定位和相对定位)
- flex 布局
- 圣杯布局、双飞翼布局
- 选择器:后代选择器、交集选择器、并集选择器、伪类选择器
- 2D转换移动translation、旋转rotate、缩放scale
- 3D转换透视 perspective、3D移动 translate3d、3D旋转 rotate3d、3D呈现 transform-style
- CSS3动画animation
- CSS hack
- Retina 屏幕的 1px 像素,如何实现
### JS基础
- ES6语法严格模式、箭头函数、Promise、Symbol数据类型、Set 和Map数据结构
- ES6转ES5
- JS数据类型转换、隐式类型转换
- 内置对象及其方法
- 数组的各种方法map、filter、every、reduce等
- 事件机制、原型继承、立即执行函数
- DOM操作、虚拟 DOM 的 diff 算法
- BOM浏览器操作
- 事件冒泡机制:捕获阶段、目标阶段、冒泡阶段。
- 异步编程Ajax、Promise、async await
- SessionStorage和LocalStorage、Cookie
- 迭代器Iterator和生成器Generator
- Web Socket
- 异步编程
- 单线程
- Canvas图像绘制
- svg 动画
### JS 高级
- JS 三座大山:原型与原型链、作用域及闭包、异步和单线程
- 作用域链、类、继承、原型继承
- this的指向和绑定规则
- 深拷贝和浅拷贝
- 防抖和节流
- Promise的宏任务和微任务
- 浏览器的重排和重绘
- 手写 Promise的整个逻辑和APIresolve、reject、then、catch、finally、allSettled、race any
- 高阶函数
- 事件委托
- call、apply、bind
- arguments 伪数组
- 函数柯里化
- 模块化CommonJS、AMD、CMD、ESModule
- JS高阶语法Iterator 迭代器、Decorator 生成器
- JS 高阶语法Decorator、Proxy/Reflect、MutationObserver、 对象属性描述符、Object.assign、Object.freeze、Object.seal
- JS 内存泄漏、JS垃圾回收算法
- TypeScript 类型检查
- Vue.js、React.js源码解析
- Vue.js、React.js的**状态管理**Vuex、Redux、Redux Toolkit、React Hooks、zustand
- V8引擎源码
### Node.js
- 回调函数
- 时间驱动机制
- 模块化
- 函数
- 路由
- 全局方法
- 文件系统
### Web 安全
- 跨域问题、同源策略、JSONP
- CORS
- XSS
- CSRF
### 页面形式
- 多端自适应布局
- SPA单页应用
- PWAProgressive Web App小程序的鼻祖
## 四、前端框架
> 每个框架和工具,都有自己的约束、价值和最佳实践。
### JS框架
- Vue.js
- React.js
- Svelte轻量级框架最近比较火
- angular逐渐淘汰
对比:
- vue :声明式编程,数据驱动的思想
- React函数式编程。如果你要改变数据那么必须调用api去改。
在vue 中几乎给你想要的全部给你了而react 追求的更多的是自力更生。
### CSS框架、组件库B端常用
- React 技术栈:[Ant Design](https://ant.design/index-cn)简称Antd
- Vue 技术栈:[Element](https://element.eleme.cn/#/zh-CN)、[Ant Design Vue](https://antdv.com/components/overview-cn)
- 简单的CSS响应式框架[Bootstrap](https://www.bootcss.com/)
- [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss)(最近比较火)
- [Vant Weapp](https://github.com/youzan/vant-weapp)轻量级的移动端含H5、小程序组件库
### 知识库框架
- Vuepress基于 Vue.js推荐
- Docusaurus基于 React.js推荐
- GitBook
- docsify可制作简易的 wiki 文档。案例:[掘墓人的 Wiki](https://wiki.juemuren4449.com/)
补充:知识库框架,首先推荐 Vuepress 和 Docusaurus功能强大成熟稳定。
### API 文档框架
- TypeDoc将TypeScript项目生成 html、markdown等文档。
- [storybook](https://github.com/storybookjs/storybook/)用于搭建UI组件的知识库。可在线预览UI组件的样式和交互效果。
### 跨端框架
- Flutter最近比较火Flutter 的Dart开发语言可以编译为 ARM 64、x86 和 JavaScript 代码
- ReactNative逐渐没落App、Web端
- Taro小程序、H5
### 桌面应用开发框架
- Electron 框架。案例VS Code软件就是用 Electron 开发的。
Electron 非常流行,也被大量公司使用,也有很多成功软件,比如 VS Code、Facebook Messager、Twitch、Microsoft Teams 等。Electron 虽然上手容易,但问题也很明显,就是**慢、吃内存和大**Electron 吃内存是因为打包的 Chromium 吃内容,同时一个 Hello World 编译后就要 120M+ 。
**VS Code、chrome、小程序开发者工具**,本质上都是运行的 chrome 内核。所以你会发现,这三个软件都很占内存,都很卡。我将其称之为“**前端头痛三剑客**”。
### 前端可视化框架、图表库
- ECharts百度的开源图表库。
- D3.js可视化 js 库。
- [Three.js](http://www.webgl3d.cn/Three.js/):基于原生 [WebGL](https://www.zoo.team/article/webglabout) 封装运行的三维引擎。[太阳系案例](http://www.yanhuangxueyuan.com/3D/solarSystem/index.html) [#](https://www.teqng.com/2021/08/16/%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%94%A8three-js%E5%88%9B%E9%80%A0%E4%B8%80%E4%B8%AA%E4%B8%89%E7%BB%B4%E5%A4%AA%E9%98%B3%E7%B3%BB/)
- [Cocos 引擎](https://www.cocos.com/products#Cocos2d-x):游戏动画开发框架。
- [白鹭引擎](https://www.egret.com/)H5游戏引擎一套完整的H5游戏解决方案。白鹭引擎的所在公司已在2022年初破产不建议使用。
### 编辑器框架
- wangEditor国内很流行
- Tiptap可定制性及极强headerless不提供任何 UI 样式,你完全可以自由地构建任何你想要的 UI。
- TinyMCE国外很火
- ueditor百度的开源框架。比较老逐渐没落。
- Monaco EditorVS Code的在线版
### Node.js 框架
- Koa新一代 Node.js 框架。
- [Egg.js](https://eggjs.github.io/zh/)Egg是在Koa基础上进一步封装的企业级Web开发框架。
- Express比较老的Node.js 框架。
### 服务端渲染框架
- Next.js 基于React.js
- Nuxt.js 基于Vue.js
### 前端测试框架
- [Mocha](https://github.com/mochajs/mocha)JS 测试框架。
- [Tiga](https://tiga.jd.com/docs/)跨端H5、小程序项目的自动化测试 SDK。凹凸实验室出品。
## 五、前端性能优化
### 性能分析工具
- 控制台的瀑布图 Waterfall
- 控制台的 performance工具日常开发过程中观察分析运行时的性能表现
- 控制台的 LightHouse :跑分、输出性能报告,分析性能
- [WebPageTest](https://www.webpagetest.org)网站:评估网站性能
- Performance 这个API实时动态测量性能
### 性能参数
- 首屏时间 = 白屏时间 + 渲染时间。预解析、预加载、预渲染、懒加载、懒执行。
- FPS帧率
- 性能的测量标准RAIL 模型
- 弱网环境,耗时对比
### 浏览器渲染优化
- 了解渲染过程、关键渲染路径
- 减少重排和重绘
- 用户从输入url到页面加载显示完成经历了哪些过程
### JavaScript 优化
- JS资源优化按需加载、编译打包、解析执行、异步加载
- V8引擎工作原理、性能优化原理
- 防抖和节流
- 无限滚动列表:做节点回收
- 骨架屏 skeleton减少布局移动
- 时间分片:把一个运行时间比较长的任务分解成一块一块比较小的任务,分块去执行,减少用户的卡顿感
- JS内存管理
### 资源优化
- 资源的压缩与合并减少http请求数量减少请求资源的大小使用 http缓存
- HTML优化减少iframe的使用避免节点的深层次嵌套避免使用table布局
- CSS优化降低CSS对页面渲染的阻塞尽早加载CSS利用GPU渲染CSS动画使用 contain属性减少布局和绘制的消耗时间
- 图片优化使用CSS3、SVG、IconFont代替图像图片懒加载 lazy loading图片的预加载渐进式图片响应式图片使用 base64 代替小于8kb的图。
- 字体优化:字体闪动问题;使用特殊字体时,建议动态加载网络字体
- 异步加载第三方资源:第三方资源不可控会影响页面的加载和显示
### 构建优化
- tree shaking、代码拆分Code Splitting
- 代码压缩混淆
- 打包时,避免对不变的库重复构建。
### 网络传输优化
- 启用Gzip对资源进行压缩
- CDN传输静态资源全部放CDN上使用户可就近获取所需内容大幅减小光纤传输距离。
- 避免重定向301、302 重定向会降低响应速度
- dns预解析使用dns-prefetch 提前解析域名提高资源加载速度。在访问以图片为主的网站时DNS预解析可以让加载时间减少5%左右。
- PWAService worker
- SSR 服务端渲染/Node直出
## 六、前端工具和资源
### 前端文档
- MDN 官方文档:<https://developer.mozilla.org/zh-CN/docs/Web>
### 前端社区
- GitHub
- stackoverflow
- 掘金
### JS 学习资源
- 现代 JavaScript 教程https://zh.javascript.info/
- 阮一峰 JS教程https://wangdoc.com/javascript/
- 阮一峰 ES6教程https://es6.ruanyifeng.com/
- TypeScript 入门教程https://github.com/xcatliu/typescript-tutorial
- Node.js学习指南https://blog.poetries.top/node-learning-notes/
### JS 代码规范
1、Airbnb JavaScript Style Guide
- 英文原版https://github.com/airbnb/javascript
- 中文版https://github.com/lin-123/javascript
2、clean code JavaScript
- 英文原版https://github.com/ryanmcdermott/clean-code-javascript
- 中文版1https://github.com/alivebao/clean-code-js
- 中文版2https://github.com/beginor/clean-code-javascript
### 前端刷题
- 前端进阶之道https://yuchengkai.cn/
### CSS 学习资源
- CSS灵感https://github.com/chokcoco/CSS-Inspiration
- CSS的各种实现效果https://lhammer.cn/You-need-to-know-css/#/
- css_trickshttps://github.com/QiShaoXuan/css_tricks
- 按需定制 CSS 动画效果https://github.com/QiShaoXuan/css_tricks
### 字体相关资源
- 360字体版权查询https://fonts.safe.360.cn/
- 最全的免费可商用字体-效果预览https://wordshub.github.io/free-font/index.html
- 常见的免费字体http://zenozeng.github.io/Free-Chinese-Fonts/
### 抓包工具
- Whistlehttps://wproxy.org/whistle/
### 兼容性查看工具
- Can I use前端API兼容性查看https://caniuse.com/
### 图片相关工具
- 图片压缩https://tinypng.com/
- 图片压缩https://docsmall.com/
- 生成代码截图https://carbon.now.sh/
### 设计工具
- **墨刀**:原型设计工具。网址:<https://modao.cc/>
- **蓝湖**:一款产品文档和设计图的在线协作平台。网址:<https://lanhuapp.com>
- **PxCook像素大厨**:高效易用的自动标注工具。软件下载链接:<https://www.fancynode.com.cn/pxcook>
- 即时设计、稿定、master go
### 流程图工具
- ProcessOn<https://www.processon.com/>
### 大纲笔记
- **幕布**<https://mubu.com>
- 飞书-思维笔记
### markdown 编辑器
- typora
- VS Code
### 代码编辑器
- VS Code
- Sublime Text
## 七、前端书籍推荐
### JS经典书籍
- 红宝书《JavaScript高级程序设计》
- 小黄书《你不知道的JavaScript》上、下册
- 犀牛书《JavaScript权威指南》
- 绿皮书《javascript语言精粹与编程实践》
### JS进阶
- 《前端开发核心知识进阶》
- 《JavaScript 二十年》
- 《JavaScript 悟道》
- 《深入理解现代JavaScript》
- 《JavaScript忍者秘籍》
- 《编写可维护的JavaScript》
- 《了不起的JavaScript工程师从前端到全端高级进阶》
- 《javascript设计模式与开发实践》
- 《WebKit技术内幕》
- 《JavaScript启示录》
### CSS
- 《CSS世界》
- 《CSS新世界》
- 《CSS揭秘》
- 《精通 CSS》
### Vue.js
- 《Vue.js设计与实现》
- 《深入浅出Vue.js》
### Node.js
- 《深入浅出Node.js》
- 《Node.js来一打 C++ 扩展》
### 数据结构和算法
- 《计算之魂》
- 《大话数据结构》
- 《学习JavaScript数据结构与算法》
### 后端
- 《领域驱动设计》
- 《推荐系统实践》
- 《数据密集型应用系统设计》
- 《代码精进之路:从码农到工匠》
### 项目管理和认知
- 《人月神话》
- 《黑客与画家》
- Joel Spolsky的书《软件随想录》《Joel 说软件》《Joel 谈优秀软件开发方法》
- 《凤凰项目》
- 《持续交付2.0》
- 《Google软件工程》
- 《软技能:代码之外的生存指南》
- 《重来3跳出疯狂的忙碌》
- 《程序员的思维修炼》
- 《管理的常识》
### 产品
- 《启示录》
- 《结网》
- 《人人都是产品经理》
- 《用户体验要素》
- 《有效需求分析》
- 《产品逻辑之美:打造复杂的产品系统》
- 《微信背后的产品观》
- 《俞军产品方法论》
- 《决胜B端——产品经理升级之路》
- 《给产品经理讲技术》
- 《精益数据分析》
- 《产品经理面试宝典》
- 《体验引擎:游戏设计全景探秘》
### 设计
- 《设计心理学》四册
- 《用户体验要素》
- 《点石成金》
- 《写给大家看的设计书》
- 《About Face 4: 交互设计精髓》
- 《设计中的设计》
- 《破茧成蝶》
- 《简约至上:交互式设计四策略》
- 《Web表单设计点石成金的艺术》
- 《触动人心设计优秀的iPhone应用》
- 《瞬间之美Web界面设计如何让用户心动》
- 《用户体验度量:收集、分析与呈现》
### 运营
- 《运营之光》两册
- 《我在一线做用户增长》
- 《增长黑客:创业公司的用户与收入增长秘籍》
- 《流量池》
- 《超级运营术》
### 商业
- 《史蒂夫·乔布斯传》
- 《浪潮之巅》
- 《赢》
- 《你凭什么做好互联网:从技术思维到商业逻辑》
- 《计算广告》
- 《详谈:左晖》
- 《在线:数据改变商业本质,计算重塑经济未来》
- 《零售的哲学》
- 《我看电商》
- 《冲浪板上的公司》
- 《一本书读懂财报》
### 思维和认知
- 《学会提问》
- 《思考,快与慢》
- 《清醒思考的艺术》
- 《把时间当作朋友》
- 《智识分子》
- 《少有人走的路》
- 《沟通的方法》
- 《我们为什么要睡觉》
## 八、前端总结和认知
### 研发视角,如何理解需求
> [点击查看大图](https://img.smyhvae.com/20220613_1330-2.jpg)。
![](https://img.smyhvae.com/20220613_1330-2.jpg)
从上面的流程图中可以看出产品经理的交付物是什么是prd吗显然不是。
产品经理的工作跟设计师、工程师非常不同。人们对工程师的期望是交付有效的代码对设计师的期望是交付视觉稿。而对于产品经理来说只交付一份prd是不够的。
产品经理要负责跟进整个产品周期,包括上线后的页面效果和数据表现。编写需求规范是一种**沟通和推动项目**的手段,但**规范本身并没有内在的价值**。很多产品经理并不借助prd来交流他们的想法他们可以用谈话还可以把想法画在白板上。也有一些产品经理虽然写了规范但却没有参照执行。
### 前端工程师应该具备怎样的能力和素质
- 技术功底、技术视野、技术追求
- 除了开发业务功能外,还需要对开发规范、工程化、组件化、模块化、测试、设计模式有一定的认知和实践
- 沟通表达能力、书面表达能力、总结复盘习惯
- 全局思维、抽象思维、持续交付意识
- 项目一号位担当,团队协作意识
- 综合权衡:成本、效率、质量、风险、体验
- 关注产品、设计、商业等各个领域。交叉学科会带来更多创新。
### 前端认知
1、虽然我们绝大多数时间耗在业务开发上但仍需要积累其他方面的沉淀做多一些有趣的、可持续的事情比如分享总结、基础能力建设、研发效能提升、技术运营建设、技术沉淀等。
2、学会提问。我们日常在提出问题和解决问题时经常容易陷入[X-Y问题](https://coolshell.cn/articles/10804.html),导致目标不明确、思路不清晰、沟通效率低下,甚至在一个完全错误的方向上浪费大量的资源、时间和精力。无论是在寻求帮助的人身上,还是在提供帮助的人身上,都有所体现。
在面对一个问题时,要理解这句话的意图、事实、情绪、期待。学会提问,学会答疑,都是一种智慧。参考[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md) 。
3、全流程跟进持续交付创造业务价值。
4、前端的本质是链接商业、设计、计算能力为用户提供专业的人机交互体验。
5、产品能力和技术能力是判断信息抓住要点整合有限的资源把自己的价值打包成一个产品进行交付并获得回报。
6、部门体系的角色有很多运营、产品、视觉、开发、测试、架构师、leader、行销、数据分析、运维等。有些工作不是“做或者不做”的问题而是程度的问题。在注意边界的前提下主动承担、全盘思考、多一份同理心这是能力和责任逐渐增强的体现。
7、谦逊、尊重和信任是协同作战和良性合作的基础。
8、组织内人与人的关系应该是怎样的有人认为是管理与被管理的关系有人认为是合作关系。而我认为**组织内的关系是奉献关系**。没有奉献作为基础,组织关系是不成立的。组织内的人与人之间是相互付出的关系,部门与部门是相互付出的关系,上级与下级之间是相互付出的关系,在这样的相互奉献关系中,组织才会真正地存在并发挥作用。
奉献关系所产生的基本现象是:每个处于流程上的人更关心他能够为下一个工序做什么样的贡献;每个部门都关心自己如何调整才能够与其他部门有和谐的接口;下级会关注自己怎样配合才能够为上级提供支持,而上级会要求自己为下级解决问题并提供帮助。
能力很重要,而付出更重要。
9、优秀的人有几个特性敏感、不能忍、有动手优化的能力。
10、前端侧重于人机交互和用户体验后端侧重于业务逻辑和大规模数据处理。理论上面向用户的产品里所有问题包括产品、设计、后端、甚至看不见的问题的表现形式都会暴露在前端而只有部分问题数据问题、计算问题、安全问题等暴露在后端这就意味着前端起到了至关重要的**承载和连接**作用。
11、前端技术的更新日新月异前端框架的技术选型层出不穷视觉审美的潮流不断更替可视化效果酷炫无比用户的运营体系逐渐精细化适老化、无障碍化、青少年人群的诉求浮出水面智能设备的升级和适配无穷无尽。所有的这一切对前端领域和前端同学就一个要求要折腾爱折腾反复折腾。