PC前端優(yōu)化

PC 瀏覽器前端優(yōu)化策略



PC 端優(yōu)化的策略很多番刊,如 YSlow(YSlow 是 Yahoo 發(fā)布的一款 Firefox 插件伏恐,現(xiàn) Chrome 也可安裝扑媚,可以對網(wǎng)站的頁面性能進行分析曾我,提出對該頁面性能優(yōu)化的建議)原則勤家,或者 Chrome 自帶的 Audits 等圾浅,總結(jié)起來主要包括網(wǎng)絡(luò)加載類掠手、頁面渲染類、CSS 優(yōu)化類狸捕、JavaScript 執(zhí)行類喷鸽、緩存類、圖片類灸拍、架構(gòu)協(xié)議類等幾類做祝,下面逐一介紹。

網(wǎng)絡(luò)加載類

1.減少 HTTP 資源請求次數(shù)

在前端頁面中鸡岗,通常建議盡可能合并靜態(tài)資源圖片混槐、JavaScript 或 CSS 代碼,減少頁面請求數(shù)和資源請求消耗轩性,這樣可以縮短頁面首次訪問的用戶等待時間声登。通過構(gòu)建工具合并雪碧圖、CSS揣苏、JavaScript 文件等都是為了減少 HTTP 資源請求次數(shù)悯嗓。另外也要盡量避免重復(fù)的資源,防止增加多余請求卸察。

2.減小 HTTP 請求大小

除了減少 HTTP 資源請求次數(shù)脯厨,也要盡量減小每個 HTTP 請求的大小。如減少沒必要的圖片坑质、JavaScript合武、CSS 及 HTML 代碼,對文件進行壓縮優(yōu)化涡扼,或者使用 gzip 壓縮傳輸內(nèi)容等都可以用來減小文件大小稼跳,縮短網(wǎng)絡(luò)傳輸?shù)却龝r延。前面我們使用構(gòu)建工具來壓縮靜態(tài)圖片資源以及移除代碼中的注釋并壓縮壳澳,目的都是為了減小 HTTP 請求的大小岂贩。

3.將 CSS 或 JavaScript 放到外部文件中茫经,避免使用或標簽直接引入

在 HTML 文件中引用外部資源可以有效利用瀏覽器的靜態(tài)資源緩存巷波,但有時候在移動端頁面 CSS 或 JavaScript 比較簡單的情況下為了減少請求萎津,也會將 CSS 或 JavaScript 直接寫到 HTML 里面,具體要根據(jù) CSS 或 JavaScript 文件的大小和業(yè)務(wù)的場景來分析抹镊。如果 CSS 或 JavaScript 文件內(nèi)容較多锉屈,業(yè)務(wù)邏輯較復(fù)雜,建議放到外部文件引入垮耳。


4.避免頁面中空的 href 和 src

當標簽的 href 屬性為空颈渊,或、终佛、標簽的 src 屬性為空時俊嗽,瀏覽器在渲染的過程中仍會將 href 屬性或 src 屬性中的空內(nèi)容進行加載,直至加載失敗铃彰,這樣就阻塞了頁面中其他資源的下載進程绍豁,而且最終加載到的內(nèi)容是無效的,因此要盡量避免牙捉。


5.為 HTML 指定 Cache-Control 或 Expires

為 HTML 內(nèi)容設(shè)置 Cache-Control 或 Expires 可以將 HTML 內(nèi)容緩存起來竹揍,避免頻繁向服務(wù)器端發(fā)送請求。前面講到邪铲,在頁面 Cache-Control 或 Expires 頭部有效時芬位,瀏覽器將直接從緩存中讀取內(nèi)容,不向服務(wù)器端發(fā)送請求带到。


6.合理設(shè)置 Etag 和 Last-Modified

合理設(shè)置 Etag 和 Last-Modified 使用瀏覽器緩存昧碉,對于未修改的文件,靜態(tài)資源服務(wù)器會向瀏覽器端返回 304揽惹,讓瀏覽器從緩存中讀取文件晌纫,減少 Web 資源下載的帶寬消耗并降低服務(wù)器負載。


7.減少頁面重定向

頁面每次重定向都會延長頁面內(nèi)容返回的等待延時永丝,一次重定向大約需要 200 毫秒不等的時間開銷(無緩存)锹漱,為了保證用戶盡快看到頁面內(nèi)容,要盡量避免頁面重定向慕嚷。

8.使用靜態(tài)資源分域存放來增加下載并行數(shù)

瀏覽器在同一時刻向同一個域名請求文件的并行下載數(shù)是有限的哥牍,因此可以利用多個域名的主機來存放不同的靜態(tài)資源,增大頁面加載時資源的并行下載數(shù)喝检,縮短頁面資源加載的時間嗅辣。通常根據(jù)多個域名來分別存儲 JavaScript、CSS 和圖片文件挠说。

9.使用靜態(tài)資源 CDN 來存儲文件

如果條件允許澡谭,可以利用 CDN 網(wǎng)絡(luò)加快同一個地理區(qū)域內(nèi)重復(fù)靜態(tài)資源文件的響應(yīng)下載速度,縮短資源請求時間损俭。

10.使用 CDN Combo 下載傳輸內(nèi)容

CDN Combo 是在 CDN 服務(wù)器端將多個文件請求打包成一個文件的形式來返回的技術(shù)蛙奖,這樣可以實現(xiàn) HTTP 連接傳輸?shù)囊淮涡詮?fù)用潘酗,減少瀏覽器的 HTTP 請求數(shù),加快資源下載速度雁仲。例如同一個域名 CDN 服務(wù)器上的 a.js仔夺,b.js,c.js 就可以按如下方式在一個請求中下載攒砖。


11.使用可緩存的 AJAX

對于返回內(nèi)容相同的請求缸兔,沒必要每次都直接從服務(wù)端拉取,合理使用 AJAX 緩存能加快 AJAX 響應(yīng)速度并減輕服務(wù)器壓力吹艇。

12.使用 GET 來完成 AJAX 請求

使用 XMLHttpRequest 時惰蜜,瀏覽器中的 POST 方法會發(fā)起兩次 TCP 數(shù)據(jù)包傳輸,首先發(fā)送文件頭受神,然后發(fā)送 HTTP 正文數(shù)據(jù)蝎抽。而使用 GET 時只發(fā)送頭部,所以在拉取服務(wù)端數(shù)據(jù)時使用 GET 請求效率更高路克。


13.減少 Cookie 的大小并進行 Cookie 隔離

HTTP 請求通常默認帶上瀏覽器端的 Cookie 一起發(fā)送給服務(wù)器樟结,所以在非必要的情況下,要盡量減少 Cookie 來減小 HTTP 請求的大小精算。對于靜態(tài)資源瓢宦,盡量使用不同的域名來存放,因為 Cookie 默認是不能跨域的灰羽,這樣就做到了不同域名下靜態(tài)資源請求的 Cookie 隔離驮履。

14.縮小 favicon.ico 并緩存

有利于 favicon.ico 的重復(fù)加載,因為一般一個 Web 應(yīng)用的 favicon.ico 是很少改變的廉嚼。

15.推薦使用異步 JavaScript 資源

異步的 JavaScript 資源不會阻塞文檔解析玫镐,所以允許在瀏覽器中優(yōu)先渲染頁面,延后加載腳本執(zhí)行怠噪。例如 JavaScript 的引用可以如下設(shè)置恐似,也可以使用模塊化加載機制來實現(xiàn)。


使用 async 時傍念,加載和渲染后續(xù)文檔元素的過程和 main.js 的加載與執(zhí)行是并行的矫夷。使用 defer 時,加載后續(xù)文檔元素的過程和 main.js 的加載是并行的憋槐,但是 main.js 的執(zhí)行要在頁面所有元素解析完成之后才開始執(zhí)行双藕。

16.消除阻塞渲染的 CSS 及 JavaScript

對于頁面中加載時間過長的 CSS 或 JavaScript 文件,需要進行合理拆分或延后加載阳仔,保證關(guān)鍵路徑的資源能快速加載完成忧陪。

17.避免使用 CSS import 引用加載 CSS

CSS 中的@import可以從另一個樣式文件中引入樣式,但應(yīng)該避免這種用法,因為這樣會增加 CSS 資源加載的關(guān)鍵路徑長度嘶摊,帶有@import的 CSS 樣式需要在 CSS 文件串行解析到@import時才會加載另外的 CSS 文件延蟹,大大延后 CSS 渲染完成的時間。


頁面渲染類

1.把 CSS 資源引用放到 HTML 文件頂部

一般推薦將所有 CSS 資源盡早指定在 HTML 文檔中更卒,這樣瀏覽器可以優(yōu)先下載 CSS 并盡早完成頁面渲染等孵。

2.JavaScript 資源引用放到 HTML 文件底部

JavaScript 資源放到 HTML 文檔底部可以防止 JavaScript 的加載和解析執(zhí)行對頁面渲染造成阻塞稚照。由于 JavaScript 資源默認是解析阻塞的蹂空,除非被標記為異步或者通過其他的異步方式加載,否則會阻塞 HTML DOM 解析和 CSS 渲染的過程果录。

3.盡量預(yù)先設(shè)定圖片等大小

在加載大量的圖片元素時上枕,盡量預(yù)先限定圖片的尺寸大小,否則在圖片加載過程中會更新圖片的排版信息弱恒,產(chǎn)生大量的重排

4.不要在 HTML 中直接縮放圖片

在 HTML 中直接縮放圖片會導(dǎo)致頁面內(nèi)容的重排重繪辨萍,此時可能會使頁面中的其他操作產(chǎn)生卡頓,因此要盡量減少在頁面中直接進行圖片縮放返弹。

5.減少 DOM 元素數(shù)量和深度

HTML 中標簽元素越多锈玉,標簽的層級越深,瀏覽器解析 DOM 并繪制到瀏覽器中所花的時間就越長义起,所以應(yīng)盡可能保持 DOM 元素簡潔和層級較少拉背。


6.盡量避免在選擇器末尾添加通配符

CSS 解析匹配到 渲染樹的過程是從右到左的逆向匹配,在選擇器末尾添加通配符至少會增加一倍多計算量默终。

7.減少使用關(guān)系型樣式表的寫法

直接使用唯一的類名即可最大限度的提升渲染引擎繪制渲染樹等效率

8.盡量減少使用 JS 動畫

JS 直接操作 DOM 極容易引起頁面的重排

9.CSS 動畫使用 translate椅棺、scale 代替 top、height

盡量使用 CSS3 的 translate齐蔽、scale 屬性代替 top两疚、left 和 height、width含滴,避免大量的重排計算

10.盡量避免使用诱渤、<table>、<rameif>

<table>內(nèi)容的渲染是將 table 的 DOM 渲染樹全部生成完并一次性繪制到頁面上的谈况,所以在長表格渲染時很耗性能源哩,應(yīng)該盡量避免使用它,可以考慮使用列表元素<ul>代替鸦做。盡量使用異步的方式動態(tài)添加 iframe励烦,因為 iframe 內(nèi)資源的下載進程會阻塞父頁面靜態(tài)資源的下載與 CSS 及 HTML DOM 的解析。

11.避免運行耗時的 JavaScript

長時間運行的 JavaScript 會阻塞瀏覽器構(gòu)建 DOM 樹泼诱、DOM 渲染樹坛掠、渲染頁面。所以,任何與頁面初次渲染無關(guān)的邏輯功能都應(yīng)該延遲加載執(zhí)行屉栓,這和 JavaScript 資源的異步加載思路是一致的舷蒲。

12.避免使用 CSS 表達式或 CSS 濾鏡

CSS 表達式或 CSS 濾鏡的解析渲染速度是比較慢的,在有其他解決方案的情況下應(yīng)該盡量避免使用友多。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牲平,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子域滥,更是在濱河造成了極大的恐慌纵柿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件启绰,死亡現(xiàn)場離奇詭異昂儒,居然都是意外死亡,警方通過查閱死者的電腦和手機委可,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門渊跋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人着倾,你說我怎么就攤上這事拾酝。” “怎么了卡者?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵蒿囤,是天一觀的道長。 經(jīng)常有香客問我虎眨,道長蟋软,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任嗽桩,我火速辦了婚禮岳守,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碌冶。我一直安慰自己湿痢,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布扑庞。 她就那樣靜靜地躺著譬重,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罐氨。 梳的紋絲不亂的頭發(fā)上臀规,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音栅隐,去河邊找鬼塔嬉。 笑死玩徊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谨究。 我是一名探鬼主播恩袱,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胶哲!你這毒婦竟也來了畔塔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤鸯屿,失蹤者是張志新(化名)和其女友劉穎澈吨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碾盟,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡棚辽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年技竟,在試婚紗的時候發(fā)現(xiàn)自己被綠了冰肴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡榔组,死狀恐怖熙尉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搓扯,我是刑警寧澤检痰,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站锨推,受9級特大地震影響铅歼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜换可,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一椎椰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沾鳄,春花似錦慨飘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吞歼,卻和暖如春圈膏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背篙骡。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工桥帆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慎皱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓茫多,卻偏偏與公主長得像,于是被迫代替她去往敵國和親天揖。 傳聞我的和親對象是個殘疾皇子夺欲,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案些阅? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,742評論 1 92
  • 圍繞前端的性能多如牛毛,涉及到方方面面市埋,以我我們將圍繞PC瀏覽器和移動端瀏覽器的優(yōu)化策略進行羅列注意,是羅列不是展...
    流動碼文閱讀 675評論 0 0
  • 前言 前端的工作并不僅僅是實現(xiàn)「視覺&交互稿」恕刘,想要開發(fā)一個高性能易維護的「完美」站點并未易事缤谎,針對前端的性能優(yōu)化...
    木羽zwwill閱讀 630評論 0 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,866評論 25 707
  • 《使徒行者》正在熱映。(本文無劇透褐着,放心看坷澡。) 有些院線有10%粵語版排片。 好像是大陸的大屏幕第一次上線粵語版的...
    公子韜韜閱讀 1,141評論 9 25