[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
- 實戰