效能優化緊急回顧筆記

2022-02-09 08:09:14 字數 2614 閱讀 4009

解決方法:(1)、建議將script標籤放在body底部,確保指令碼執行前頁面已完成渲染

(2)、可以將某些指令碼直接寫在script標籤插入html中,進行首屏優化

(3)、使用webpack等工具打包或壓縮**,減少請求與檔案體積

資料有四種方式,字面量、本地變數、陣列、物件

多層引用,例如window.location.href、原型鏈搜尋等,如果使用多次,建議進行本地儲存

比如:h = window.location.href

dom操作很慢,原因有2:dom節點很複雜、修改dom會導致重繪(repaint)和重排(reflow)

(1)、插入節點推薦使用innerhtml,大量字串建議使用陣列拼接

(2)、htmlcollection集合是動態檢測,如果物件更新,對應的集合也更新,無論是獲取還是修改都會觸發一次

(3)、比較通用的優化方法,快取(類)陣列長度,再進行迴圈遍歷操作

(4)、重排、重繪都是代價昂貴的操作,儘量減少發生。

(5)、事件委託

tips:重繪、重排

dom樹 => 表示頁面結構

渲染樹 => 表示dom節點如何顯示

dom樹中的每乙個需要顯示的節點在渲染樹中至少存在乙個對應的節點(隱藏的dom元素在dom樹中沒有對應節點)。 

當dom變化影響了元素的幾何屬性(寬或高),瀏覽器需要重新計算元素的幾何屬性。瀏覽器會使渲染樹中受到影響的部分失效,重新構造渲染樹,這個過程叫『重排(reflow)』;完成重排後,瀏覽器會重新繪製受影響的部分到螢幕中,該過程稱為『重繪(repaint)』。

當改變顏色時,只會引起重繪。

重排發生條件:

1、新增、刪除可見元素

2、元素位置改變

3、元素尺寸改變

4、內容改變

5、頁面渲染初始化

6、瀏覽器視窗尺寸改變

瀏覽器會通過佇列化修改(類似於task)來優化重排過程。然而,當獲取類似於offsettop、getcomputedstyle等屬性時,會強制瀏覽器渲染已獲取最近屬性。

當需要對dom做多次操作時,有三種方式優化:

1、將dom隱藏,操作完後顯示

2、構建文件碎片,插入dom(推薦)

3、建立乙個dom備份,操作完後替換原dom

(1)、倒序+快取長度優化迴圈: 

//

某陣列var arr =;

//迴圈處理元素

for (var i = 0; i < arr.length; i++)

//優化迴圈體

for (var i = arr.length; i--;)

(2)、貼乙個duff's device,通過分割迴圈次數提公升效率:

//

duff's device

var iterations = math.floor(items.length / 8), //

表示多少輪迴圈

startat = items.length % 8, //

8的餘數

i = 0; //

從0開始迭代

do startat = 0;

} while (--iterations);

優化後的演算法,取消了switch語句,將餘數與整數分別處理:

//

餘數var i = item.length % 8;

while

(i)

//整數

i = math.floor(item.length / 8);

while

(i)

(3)、if-else與switch

條件增加時,優化使用switch,效能與**可讀性方面都更好。(在js中switch使用全等,沒有隱式型別轉換帶來的損耗)

優化if-else:將最可能出現的情況放在第一項

(4)、查詢表

使用陣列或普通物件來構建查詢表。

請求:

(1)、正常ajax請求

使用xhr時,post與get的對比。

對於不會改變伺服器狀態,只會獲取資料(冪等行為)的請求,應該使用get,get請求的資料會被快取起來,多次請求有助於提高效能。

當url加上引數長度過長使用post。

(2)、動態指令碼注入

這種技術克服了xhr最大限制:不能跨域。

該方法通過建立乙個script標籤, 將src設定為不同域的url。

動態指令碼注入的控制有限,無法設定請求頭,只能通過get傳參。

快取:

(1)、在服務端,設定http頭資訊以確保你的響應會被瀏覽器快取

通過get方式傳送請求,並在響應中傳送正確的http頭資訊,expires頭資訊會告訴瀏覽器快取響應多久。

(2)、在客戶端,把獲取到的資訊儲存到本地,從而避免再次請求

6、finally

(1)、檔案合併(webpack)

(2)、檔案壓縮

(3)、快取

(4)、cdn

完結撒花!

merge語句導致的效能問題緊急優化

晚上正在休息的時候,突然收到一封報警郵件。報警內容 cpu utilization is too high 報警級別 problem 監控專案 cpu idle time 59.11 這個報警資訊已經非常明確,cpu使用率很緊張了。這台伺服器上執行著oracle和mysql例項,所以第一感覺是不是m...

前端效能優化筆記

1.減少http請求 2.如果需要在頁面中為背景,按鈕,導航欄提供大量背,css sprites可以縮短響應時間 3.合併指令碼和樣式表 4.對於地理上分散的使用者群來說,cdn 內容發布網路 能輕易的得到響應速度的提高 注 cdn用於發布靜態內容,如,指令碼,flash.動態html會對儲存有特殊...

CSS 效能優化筆記

在實習做乙個移動專案的時候,實現乙個動畫效果,在 iphone 和 chrome 上除錯沒有問題,在千元左右的 android 機上測試問題就很大了,卡頓非常明顯,百思不得其解,卒。這個悲傷的故事就是本文的引子,真真切切的體會到了 css 對使用者體驗的影響非常明顯,稍有不慎就是乙個大坑。下面,我們...