[toc]
### 1.网络优化策略
1. 减少http请求,合并js,css,合理内嵌css, js
2. 设置服务端缓存,提高服务端处理速度,强缓存,协商缓存
```js
强缓存:// Expires/Cache-Control
协商缓存:// Etag/last-modified, if-modified-since/last-modified
```
3. 避免重定向,重定向会降低响应速度(301, 302)
4. 使用dns-prefetch,实现dns预解析
```js
<link ref="dns-prefetch" href="" >
```
5. 域名分片技术,将资源放到不同的域名下。解决同一个域名最多处理6个tcp链接问题
6. 采用cdn,加快访问速度
```
cdn:内容分发网络,指派最近的网络服务提供资源
```
7. gzip压缩优化对传输资源进行体积压缩(html, js, css)
```js
Content-Encoding: gzip
```
8. 加载数据优化级:
+ preload(预先请求当前页面需要的资源),首页的内容都用preload
+ prefetch(空闲的时候请求资源,将数据缓存到http缓存中),子页的内容都用prefetch
```js
<link ref="preload" href="style.css">
```
### 2.减少重绘和重排
关键渲染路径:
```js
js触发视觉变化 -> 样式计算 -> 重排布局(回流) -> 重绘绘制 -> 合成
```
重排(回流)Reflow:添加元素,删除元素,修改大小,移动元素位置,获取位置相关信息
重绘Repaint:页面中元素样式的改变并不影响它在文档流中的位置
+ 脱离文档流:absolute定位
+ 渲染时给图片固定宽高
+ 尽量使用css3动画(scale替代width,因为css3绘制会少一些)
+ will-change: transform,gpu加速,会产生一个覆盖的图层,变化不会影响文档流
### 3.静态文件优化
#### 1.图片优化
+ 图片懒加载,原生的图片懒加载,loading="lazy"
```js
<img loading="lazy" src="./images/1.jpg" width="300" height="450" />
```
+ 减少图片尺寸
+ img 设置 alt 属性,也可以提升 seo 优化,图片给宽高
+ 采用 base64url减少图片请求
+ 采用渐进式图片,从模糊到清晰,ui提供
#### 2.HTML优化
+ 语义化html,nav, section, bottom,提高 seo
#### 3.css优化
1.减少伪类选择器,减少样式层数,减少通配符
2.删除空行,注释,无意义单位,css压缩
3.抽离css:使用外链css,可以对css进行缓存
4.减少@import使用,因为@import采用的是串行加载
#### 4.JS优化
1. 使用async, defer 异步加载文件
2. 减少dom操作
3. 操作dom时,使用虚拟dom,最后再一口气添加到真实dom
4. webWorker
- JavaScript
- 1. DOM事件流
- 2. 模拟 new, Object create(), bind
- 5. 封装函数进行字符串驼峰命名的转换
- 6. 什么是promise
- 7. 判断一个数是否为数组
- 10. __proto__和prototype以及原型,原型链,构造函数
- 11. 继承
- 12. 闭包
- 13. 回调函数
- 14. var 和 let 区别
- 15. this、bind、call、apply
- 16.undefined和null的区别
- 17.内存泄漏
- 18.垃圾回收机制
- html css
- 1. 元素垂直水平居中
- 2. 清除浮动
- 3. bootstrap栅格系统
- 4. px rpx em rem vw 的区别
- 5. 两种盒子模型
- 6. 合集
- web类
- 1. html5的新特性以及理解(web标签语义化)
- 2. 什么是路由,关于前端路由和后端路由
- 3. 对优质代码的理解
- 4. cookie 和 sessionStorage和localStorage
- 5. 浏览器内核
- 6. http 状态码
- 7. href 和 src 的区别
- 8. link 和 @import 的区别
- 9. http 状态码
- 10. websocket
- 11. 浏览器解析url
- 12.http缓存
- vue
- 1.vue2和vue3有哪些区别
- 1. 对 mvvvm 的理解
- 2. mvvm的优缺点
- 3. 数据双向绑定的原理
- 4. 生命周期
- 5. 组件如何通信
- 6. computed和watch的区别
- 7. proxy 和 Object.defineProperty
- 8. 虚拟dom和 diff算法
- 9. 路由的嵌套与传参
- 10. 路由导航钩子
- 11. axios 的理解
- 12. vue自定义指令 diretive
- 13. diff 的实现
- 14. 实现一个简单的双向绑定
- 15. 为什么 data 是一个函数
- 题谱
- js
- 手写篇
- css
- vue
- react
- 算法
- 自我介绍
- 八股文
- 源项目地址
- 1.计算机网络
- 2.浏览器
- 3.html和css
- 4.javascript
- 6.typescript
- 7.vue
- 8.react
- 大厂面试
- 面试题大全
- 常见性能优化
- 面试实战
- 面试分析
- 押题
- 1.微前端在项目中的实际应用
- 2.性能优化
- vue相关
- 1.说一说HashRouter和HistoryRouter的区别和原理
- 无敌之路,牛客网面试题自测记录
- 前端基础
- 1.html
- 2.js基础
- 珠峰性能优化
- WebWorker
- url到渲染
- 浏览器加载机制
- 自我介绍1
- 手写题
- 1.compose
- 2.setTimeout模拟setInterval
- 3.手写数组拍平
- 4.手写promise.all
- 5.手写深拷贝
- webpack
- 实战