前端性能优化
备注: + 代表被问到的次数,没有 + 代表自己整理了,但没被问到
1.整个前端性能提升大致分为几类
网络性能
运行性能
(1.js css 2.图片 3.缓存预加载 4.SSR 5.多域名加载 6.负载均衡)
2.为什么把<scrpit>
放<body>
后面+
这里是浏览器加载一个有 <script>
标签的网站发生的事情:
- 拉取 HTML 页面
- 开始解析 HTML
- 解析到
<script>
标签之后准备获取 script 文件. - 浏览器获取script文件。同时,html 解析中断并且阻断页面上其他html的解析。
- 一段时间后,script下载完成并且执行。
- 继续解析HTML文档的其他部分(解析script之后的html代码)
第4步导致了不好的用户体验,直到script文件全部下载完成之前HTML都不能得到解析。
3.base64为什么能提升性能,缺点
减少http请求
缺点: 编解码需要时间,体积变大
4.前端开发有哪些提升性能的点+
缓存利用:缓存Ajax,使用CDN,使用外部js和css文件以便缓存,添加Expires头,服务端配置Etag,减少DNS查找等
请求数量:合并样式和脚本,使用css图片精灵,初始首屏之外的图片资源按需加载,静态资源延迟加载。
##从输入url到显示页面都发生了什么+
-
输入url,常见的http协议的端口号是80,https是443
-
查看浏览器是否有缓存,其中分为强制缓存和协商缓存
强制缓存:判断HTTP首部字段:cache-control表示存储的文件在多长时间内均有效、Expires表示到达系统某个时间内数据均有效
协商缓存:通过HTTP的last-modified服务器返回的字段,表示最后一次更新的时间,Etag是资源的实体标识(哈希字符串),当资源内容更新时,Etag会改变。服务器会判断Etag是否发生变化,如果变化则返回新资源,否则返回304。
-
dns查询,分为迭代查询和递归查询
-
TCP三次握手建立连接
-
浏览器向服务器发送HTTP请求
-
浏览器接收响应
服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。
状态码主要包括以下部分
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
-
页面渲染
其中会涉及到reflow(回流,会导致重新渲染)和repaint(重绘,只会重画一部分)。
减少reflow/repaint的措施:+
- 不要一条一条地修改 DOM 的样式。与其这样,还不如预先定义好 css 的 class,然后修改 DOM 的 className。
- 不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。
- 为动画的 HTML 元素设置 fixed 或 position 的 absoult,那么修改他们的 CSS 是不会 reflow 的。
- 千万不要使用 table 布局。因为可能很小的一个小改动会造成整个 table 的重新布局。
git常用操作+
git commit -m ... 添加描述
git push 上传
git pull 下拉
git checkout -b 分支名 创建新分支
git merge ... 合并分支
git log 查看记录
git reset fileName 撤销commit -m
git branch -vv 查看本地分支