前端性能優化
備註: + 代表被問到的次數,沒有 + 代表自己整理了,但沒被問到
1.整個前端性能提升大致分爲幾類
網絡性能
運行性能
(1.js css 2.圖片 3.緩存預加載 4.SSR 5.多域名加載 6.負載均衡)
2.爲什麼把<scrpit>
放<body>
後面+
這裏是瀏覽器加載一個有 <script>
標籤的網站發生的事情:
- 拉取 HTML 頁面
- 開始解析 HTML
- 解析到
<script>
標籤之後準備獲取 script 文件. - 瀏覽器獲取script文件。同時,html 解析中斷並且阻斷頁面上其他html的解析。
- 一段時間後,script下載完成並且執行。
- 繼續解析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的措施:+
- 不要一條一條地修改 DOM 的樣式。與其這樣,還不如預先定義好 css 的 class,然後修改 DOM 的 className。
- 不要把 DOM 結點的屬性值放在一個循環裏當成循環裏的變量。
- 爲動畫的 HTML 元素設置 fixed 或 position 的 absoult,那麼修改他們的 CSS 是不會 reflow 的。
- 千萬不要使用 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 查看本地分支