1,減少頁面加載時候得http請求
? ? 首先項目中無用得圖片或者視頻 音頻資源應(yīng) 及時刪除固该,頁面中小圖如 導(dǎo)航小圖標(biāo) 在線離線狀態(tài)等可以整合成雪碧圖。再者像頁面得導(dǎo)航圖標(biāo)之類得 可以可用 字體圖標(biāo) ,最后可以合并css 和js? 當(dāng)前前提是要保證頁面得正常渲染和 js 邏輯得正常運行 宠纯,不能一味得大鍋燉合并
2,使用CDN?
? ? 一些常用得插件和組件可以使用 正規(guī)得 穩(wěn)定得cdn 地址來減輕自己服務(wù)器得壓力
3层释,減少cookie得使用和注意其大小
?4婆瓜,減少重繪(repaint)和回流(reflow)
? ? 頻繁觸發(fā)重繪和回流,會導(dǎo)致UI得頻繁渲染,最終導(dǎo)致頁面加載緩慢和js得緩慢廉白,回流必然會引起重繪个初,而重繪不一定會引起回流
當(dāng)render樹得一部分因為元素得尺寸 ,布局猴蹂,隱藏等改變而需要重新構(gòu)建院溺,我們稱之為回流
當(dāng)render元素得需要更改一些屬性如顏色等我們稱之重繪
首先我要大致了解一下當(dāng)瀏覽器得到頁面之后得大致渲染過程
? ? 1,解析HTML 構(gòu)建DOM樹(包括發(fā)起http請求來獲取內(nèi)容)
? ? 2磅轻,解析css
? ? 3珍逸,合并DOM樹和css規(guī)則樹 然后生成render 樹
? ? 4,布局render樹 計算元素得大小瓢省,位置
? ? 5弄息,繪制render樹 生成頁面信息
構(gòu)建CSSOM樹時 瀏覽器會根據(jù)優(yōu)先級從低到高得順序來設(shè)置這個節(jié)點得屬性,從全局屬性開始? ?一直尋到這個元素得具體屬性
所以需要注意得有
????1勤婚,將多次頁面得樣式改變合并為一次操作 如竟然避免一個頁面 即有外部得css又有style 樣式 還有行間屬性?
????2摹量,將某個元素需要頻繁改動其位置時 可以設(shè)置其脫離文檔流 從而不會影響其他元素
????3,隊友一個有多個層次得dom節(jié)點 可以等構(gòu)建完之后再插入頁面中
????4馒胆,改變元素之前可以先設(shè)置display為none 然后等整個操作完再 設(shè)置display:none
????5,img標(biāo)簽可以先預(yù)設(shè)置其大小
5,刪除不需要得腳本和盡量把腳本放在頁面底部?
? ??腳本文件在下載時缨称,在其下載完成、解析執(zhí)行完畢之前祝迂,并不會下載任何其他的內(nèi)容睦尽,因為瀏覽器并不知道腳本是否會操作頁面的內(nèi)容;其次型雳,后面加載的腳本可能會依賴前面的腳本 当凡,如果并行下載,后面的腳本可能會先下載完并執(zhí)行纠俭,產(chǎn)生錯誤沿量。但是如果確定某個腳本不會操作頁面 可以設(shè)置defer 來延遲腳本得執(zhí)行,或者采用動態(tài)添加script 到頁面
6冤荆,減少頁面定時器得使用 和及時關(guān)閉定時器
7朴则,注意某個元素得樣式得命名
? ? 因為瀏覽器時從右向左匹配選擇符的,所以像#div>a 這種后代得匹配需盡量少用
? ??