[toc]
### 1.代码层面的优化
#### 1.利用 v-if 和 v-show减少初始化渲染和切换渲染的性能开销
比如dialog弹框,首先这个组件可以通过import懒加载,第二,dialog框这个组件内部可以先用一个v-if包裹起来,等外部调用的时候,把这个v-if改为true,同时更新dialogVisible属性为true,这样这个组件就被使用了,而关闭组件还是只改变dialogVisible
+ 外部使用dialog
```js
<template>
<div>
<Button type="primary" @click.native="add">添加</Button>
<add v-model="add.show" v-bind="add"></add>
</div>
</template>
<script>
export default{
data(){
return{
add:{
show:false,
init:false
}
}
},
components:{
add:() =>import('./add.vue')
},
methods:{
add(){
this.add.show=true;
this.add.init=true
}
}
}
</script>
```
+ dialog内部
```js
<template>
<div v-if="init">
<Modal v-model="show" title="添加" @on-cancel="handleClose"></Modal>
</div>
</template>
<script>
export default{
props:{
value:{
type:Boolean,
default:false
},
init:{
type:Boolean,
default:false
}
},
data(){
return{
show:false,
}
},
watch:{
value(val){
if(val){
this.show = val;
}
}
},
methods:{
handleClose(val) {
this.$emit('input', val);
},
}
}
</script>
```
#### 2.computed, watch, methods要注意分场景使用
有些功能这三个需求是都可以实现的,但是合理的使用可以避免一些性能消耗+ computed:适合性能消耗比较大的计算
比如要遍历一个巨大的数组计算,computed因为具有有一个缓存特性,只有依赖的值发生了变化时,他才会重新计算,否则直接返回缓存值
+ methods: 可以实现 computed一样的计算,但是没有缓存功能
+ watch:监听一个数据,执行callback回调函数
适合数据变化时需要执行一些异步操作的情况
#### 3.避免v-if和v-for同级,防止v-for渲染出不必要的dom
因为vue2中,v-for的优先级比v-if高,所以可以先通过computed过滤一遍内容,再进行 v-for
#### 4.给v-for循环添加key提高diff算法计算速度,避免dom的损耗
#### 5.Object.freeze()冻结不需要响应式变化的数据
#### 6.防抖和节流
#### 7.图片懒加载和优化
#### 8.挂载节点内放置静态页面,优化白屏显示
#### 9.路由懒加载
## 打包优化
#### 1.splitChunks
#### 2.MiniCssExtractPlugin
#### 4.
- 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
- 实战