不管是自己之前面試還是看網上的面試題,都會碰到乙個經典的面試題:從輸入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
不同的場景,使用不同的檔案型別
防抖和節流
瀏覽器的resize
、scroll
、keypress
、mousemove
等事件在觸發時,會不斷地呼叫繫結在事件上的**函式,極大地浪費資源,降低前端效能。
防抖就是作用是在短時間內多次觸發同乙個函式,只執行最後一次,或者只在開始時執行。節流是在一段時間內只允許函式執行一次。
回流(重排)和重繪
當render tree
中部分或全部元素的尺寸、結構、或某些屬性發生改變時,瀏覽器重新渲染部分或全部文件的過程稱為回流。
當頁面中元素樣式的改變並不影響它在文件流中的位置時(例如:color
、background-color
、visibility
等),瀏覽器會將新樣式賦予給元素並重新繪製它,這個過程稱為重繪。
回流必將引起重繪,而重繪不一定會引起回流。但是不管是回流還是重繪,都會影響效能。瀏覽器會幫助我們優化這些操作,瀏覽器會維護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...