通過面試題看效能優化

2022-07-01 09:39:11 字數 2072 閱讀 3906

不管是自己之前面試還是看網上的面試題,都會碰到乙個經典的面試題:從輸入url到頁面載入完成,發生了什麼?

首先說一下自己對於這道題的理解和回答:

使用者在瀏覽器中輸入url

瀏覽器通過dns,把url解析為ip

和ip位址建立tcp連線,傳送http請求

伺服器接收請求,進行相關操作後返回的htpp相應

瀏覽器收到首屏html,開始渲染

解析html為dom

解析css為css-tree

dom + css生成render-tree繪圖

載入script的js檔案

執行js

所謂效能優化,就是上面的步驟加在一起,時間盡可能的短,所以基本分為兩大方向:少載入檔案,少執行**。

從上面的圖中可以看出,瀏覽器渲染分為三步:

從這個渲染流程圖中,可以很容易得出下面的結論:

因此,可以從下面幾個方面優化頁面載入渲染速度:

dns服務就是將taobao.com這種網域名稱解析為140.205.220.96

dns查詢過程

檢視本地dns快取

本地沒有快取,發起dns請求,向本地配置的dns伺服器請求

優化dns預解析(prefetch預獲取):先在瀏覽器中宣告一些dns解析的內容,因為dns獲取內容並不一次就能拿到全部的,而是通過不斷的遞迴查詢才能獲取。

tcp負責資料的完整性和有序性,包括三次握手、四次揮手、粘包、滑動視窗等機制

從tcp的工作機制來看,這一階段的優化策略主要包括以下幾塊

建立長連線

減少檔案請求次數:雪碧圖、快取控制、懶載入

減少使用者和服務取得距離:cdn

本地儲存

udp適用場景:效能高、允許丟包、包本身特別小而不需要拆分、重發機制很好寫  典型的就是dns

通常是最占用流量的,pc端載入的平均大小是600k,簡直比js打包後的檔案還要大,所以針對的優化,也是收益不錯的。方面的優化主要包括三塊

格式問題

懶載入cdn

不同的場景,使用不同的檔案型別

防抖和節流

瀏覽器的resizescrollkeypressmousemove等事件在觸發時,會不斷地呼叫繫結在事件上的**函式,極大地浪費資源,降低前端效能。

防抖就是作用是在短時間內多次觸發同乙個函式,只執行最後一次,或者只在開始時執行。節流是在一段時間內只允許函式執行一次。

回流(重排)和重繪

render tree中部分或全部元素的尺寸、結構、或某些屬性發生改變時,瀏覽器重新渲染部分或全部文件的過程稱為回流。

當頁面中元素樣式的改變並不影響它在文件流中的位置時(例如:colorbackground-colorvisibility等),瀏覽器會將新樣式賦予給元素並重新繪製它,這個過程稱為重繪。

回流必將引起重繪,而重繪不一定會引起回流。但是不管是回流還是重繪,都會影響效能。瀏覽器會幫助我們優化這些操作,瀏覽器會維護1個佇列,把所有會引起回流、重繪的操作放入這個佇列,等佇列中的操作到了一定的數量或者到了一定的時間間隔,瀏覽器就會flush佇列,進行乙個批處理。這樣就會讓多次的回流、重繪變成一次回流重繪。除此之外,我們自己也需要盡量的減少回流和重繪。

vue

react

iOS面試題 效能優化篇

降低包大小需要從兩方面著手 1 模擬器debug中color blended layers紅色區域表示圖層發生了混合 2 instrument 選中core animation 勾選color blended layers 避免圖層混合 uilabel圖層混合解決方法 ios8以後設定背景色為非透明...

iOS面試題整理 效能優化

ios效能優化 在效能優化中乙個最具參考價值的屬性是fps frames per second,其實就是螢幕重新整理率,蘋果的iphone推薦的重新整理率是60hz,也就是說gpu每秒鐘重新整理螢幕60次,這每重新整理一次就是一幀frame,fps也就是每秒鐘重新整理多少幀畫面。靜止不變的頁面fps...

效能測試面試題

1.什麼是負載 測試?什麼是 效能測試?2.效能測試包含了哪些測試 至少舉出3種 3.簡述效能測試的步驟 4.簡述使用 loadrunner的步驟 5.什麼時候可以開始執行效能測試?6.loadrunner由哪些部件組成?7.你使用loadrunner的哪個部件來錄製指令碼?8.loadrunner...