天天看點

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

雖然書籍很多年前就出版了,但裡面的内容還是耐人尋味,這次就好好的實踐了一下。

紙上得來終覺淺,絕知此事要躬行,實踐中将會發現一些問題。

下面所有的實驗都是在Chrome 49浏覽器中執行的。

浏覽器的并發請求數目限制是針對同一域名的。

同一時間針對同一域名下的請求有一定數量限制,超過限制數目的請求會被阻塞。

是以我們經常能看到不同靜态資源會有不同域名,例如圖檔、JavaScript、CSS等。

HTTP1.1與HTTP1.0,限制的數量還不一樣。

1)HTTP1.1

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符
實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

當一個域名的時候最多隻能并發6個請求,而兩個域名的時候能并發10個請求。

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

2)長連接配接

由于長連接配接的關系,HTTP1.1建議每個伺服器建立少量的連接配接。

如果浏覽器支援 keep-alive(長連接配接),它會在請求的標頭中添加:

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

長連接配接的原理是使用同一個TCP連接配接來發送和接收多個HTTP請求/應答,而不是為每一個新的請求/應答打開新的連接配接的方法。

當用戶端發送另一個請求時,它會使用同一個連接配接。這一直繼續到用戶端或伺服器端認為會話已經結束,其中一方中斷連接配接。

下圖左邊每次請求後都會斷開,右邊就是請求後不會馬上斷開。

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

是以想要高并發量還可以降級到HTTP1.0,不過具體情況如何,我還沒試驗過。

3)Cookie-free Domains

在請求下載下傳靜态小圖檔、靜态小檔案的時候,浏覽器會把它當成普通請求一樣,在request的header資訊裡附加cookie資訊。

如果每個header都附加1kB的cookie,那麼對于一個有50個小檔案的複雜網頁來講,就白白增加了50kB的傳輸量。

網上有很多相關的解決方案,可以嘗試一下。

覽器會保持css和js的解析順序,如果把行内腳本放在樣式表之後,會明顯地延遲資源的下載下傳(結果是樣式表下載下傳完成并且行内腳本執行完畢時,後續資源才能開始下載下傳)。

這是因為行内腳本可能含有依賴于樣式表中樣式的代碼,比如document.getElementsByClassName()。

行内腳本就是将腳本直接寫在HTML頁面中。

下面通過Chrom的工具檢視下:

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符
實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

Stalled:浏覽器得到要發出這個請求的指令,到請求可以發出的等待時間,一般是代理協商、以及等待可複用的TCP連接配接釋放的時間,不包括DNS查詢、建立TCP連接配接等時間等。

Request sent:請求第一個位元組發出前到最後一個位元組發出後的時間,也就是上傳時間。

Waiting(TTFB) :請求發出後,到收到響應的第一個位元組所花費的時間(Time To First Byte)。

Content Download:收到響應的第一個位元組,到接受完最後一個位元組的時間,就是下載下傳時間。

的确出現了延時下載下傳,我将“script”标簽去掉後,看到的确是并行下載下傳的。

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

平時就會做圖像優化,例如制作Sprite圖等。這裡是介紹下壓縮圖檔。

關于壓縮的原理,涉及到些算法,可以上網查詢下。

常見的格式中JPG、PNG、GIF亦屬于位圖,是以它們的資料結構大緻相同,隻是每一種圖檔格式都有不同的壓縮算法,不同的掃描方式,但是優化的方法都有一個共同點,都是圍繞着每個像素顔色值來下手。

1)工具

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

下圖來自于tinypng網,國寶熊貓幫我壓縮了54%的品質,不過這個網站我上了好久才上去。

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

2)webP

根據 Google 的測試,無損壓縮後的 WebP 比 PNG 檔案少了 45% 的檔案大小,即使這些 PNG 檔案經過其他壓縮工具壓縮之後,WebP 還是可以減少 28% 的檔案大小。

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

一直能看到iframe的種種缺點,但是并沒有通過資料表達出來,這次用資料說明一下。

1)阻塞onload事件

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

2)腳本位于iframe之前

圖中紅色框框中的就是iframe中的内容,的确被阻塞了。

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符
實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

3)iframe中連接配接共享

這五張圖檔并不是并行下載下傳,而是有先後順序的,紅色方框中的圖檔來自于iframe。

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

1)選擇器測試結構

1. Baseline設定了CSS類,但不會比對

2. Tag就多了個A标簽CSS設定

3. Class設定了A中的class屬性

4. Child使用了關系選擇符中的子選擇符“>”

5. Descendant使用了關系選擇符中的包含選擇符

6. Universal使用了通配符

2)耗時記錄

<a href="http://stevesouders.com/efws/css-selectors/baseline.php" target="_blank">Baseline</a>

<a href="http://stevesouders.com/efws/css-selectors/tag.php" target="_blank">Tag</a>

<a href="http://stevesouders.com/efws/css-selectors/class.php" target="_blank">Class</a>

<a href="http://stevesouders.com/efws/css-selectors/child.php" target="_blank">Child</a>

<a href="http://stevesouders.com/efws/css-selectors/descendant.php" target="_blank">Descendant</a>

<a href="http://stevesouders.com/efws/css-selectors/universal.php" target="_blank">Universal</a>

CSS類

.noclass0001 {

  background: #CFD; 

}

...

.noclass1000 {

  background: #CFD;

A {

  background: #CFD;  

.class0001 {

  background: #CFD;  

.class1000 {

DIV &gt; DIV &gt; DIV &gt; P &gt; A.class0001 {  

DIV &gt; DIV &gt; DIV &gt; P &gt; A.class1000 {

DIV DIV DIV P A.class0001 {  

DIV DIV DIV P A.class1000 {

P.pclass0001 * {

P.pclass1000 * {

耗時

85ms

63ms

71ms

101ms

77ms

501ms

60ms

67ms

479ms

185ms

444ms

76ms

59ms

1116ms

64ms

73ms

54ms

69ms

62ms

68ms

83ms

52ms

78ms

72ms

87ms

81ms

去掉最高和最低後

平均耗時

63.75ms

69.75ms

84.75ms

79.25

實踐一下前端性能分析一、浏覽器并行下載下傳數量二、行内腳本阻塞并行下載下傳三、圖像優化四、iframe五、CSS選擇符

行内腳本阻塞并行下載下傳demo:

<a href="http://download.csdn.net/download/loneleaf1/9519133" target="_blank">http://download.csdn.net/download/loneleaf1/9519133</a>

參考資料:

<a href="https://www.zhihu.com/question/20474326" target="_blank">浏覽器允許的并發請求資源數是什麼意思?</a>

<a href="https://zh.wikipedia.org/wiki/HTTP%E6%8C%81%E4%B9%85%E8%BF%9E%E6%8E%A5" target="_blank">HTTP持久連接配接</a>

<a href="https://segmentfault.com/q/1010000002399481" target="_blank">chrome的timeline的問題?</a>

<a href="http://ghdcblog.cn/article/%E4%BA%86%E8%A7%A3%E6%97%A0%E9%98%BB%E5%A1%9E%E5%8A%A0%E8%BD%BDjavascript%E8%84%9A%E6%9C%AC%E6%8A%80%E6%9C%AF" target="_blank">了解無阻塞加載javascript腳本技術</a>

<a href="http://blog.youyo.name/archives/imgae-compress.html" target="_blank">無損壓縮網站上的圖檔</a>

<a href="http://tid.tenpay.com/?p=4711" target="_blank">圖檔原理與優化</a>

<a href="http://ued.taobao.org/blog/2010/12/jpg_png/" target="_blank">圖檔格式與設計那點事兒</a>

<a href="https://www.smashingmagazine.com/2009/07/clever-png-optimization-techniques/" target="_blank">Clever PNG Optimization Techniques</a>

<a href="http://isux.tencent.com/introduction-of-webp.html" target="_blank">WebP 探尋之路</a>

<a href="http://www.ituring.com.cn/article/210772" target="_blank">提升網站使用者體驗—WebP 圖檔的高效使用</a>

    本文轉自 咖啡機(K.F.J)   部落格園部落格,原文連結:http://www.cnblogs.com/strick/p/5475758.html,如需轉載請自行聯系原作者

繼續閱讀