2020-3月份前端面试总结——前端性能优化相关

54 阅读3分钟

前端性能优化

备注: + 代表被问到的次数,没有 + 代表自己整理了,但没被问到

1.整个前端性能提升大致分为几类

​ 网络性能

​ 运行性能

(1.js css 2.图片 3.缓存预加载 4.SSR 5.多域名加载 6.负载均衡)

2.为什么把<scrpit><body>后面+

这里是浏览器加载一个有 <script> 标签的网站发生的事情:

  1. 拉取 HTML 页面
  2. 开始解析 HTML
  3. 解析到 <script> 标签之后准备获取 script 文件.
  4. 浏览器获取script文件。同时,html 解析中断并且阻断页面上其他html的解析。
  5. 一段时间后,script下载完成并且执行
  6. 继续解析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的措施:+

    1. 不要一条一条地修改 DOM 的样式。与其这样,还不如预先定义好 css 的 class,然后修改 DOM 的 className。
    2. 不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。
    3. 为动画的 HTML 元素设置 fixed 或 position 的 absoult,那么修改他们的 CSS 是不会 reflow 的。
    4. 千万不要使用 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 查看本地分支