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