摘要:文章根據高效能網站建設指南,透過軟體質量屬性的六個一級指標,來討論一個如何建立一個高效能的網站,主要強調了前端工程師的重要性以及前端建設對於一個的網站效能的重要性。
關鍵詞:響應速率 請求 高效能 效率
在書中有幾個令我印象深刻的資料,前端的問題可能消耗掉整體時間的80%,而HTML文件只佔總相應時間的5%,我大二,大一時期也參加過某些演算法類競賽,在後端中不斷的最佳化程式碼,節省的時間可能只是毫秒級別,而我在這本書中動不動就看到了以秒為單位的節省方法,這更加體現了前端對於建設一個高效能網站的重要性。那麼如何透過提高前端效率來建設一個高效能的網站呢?
1.數量
這個數量指的是傳送HTTP請求的數量。理想情況下,一個頁面應該使用不多於一個指令碼和樣式表。因為每多出一個檔案,都會額外的發出一次HTTP的請求,當然,這是理想情況,對於一個高效能的網站我們不僅要在意其效能,還要關注他的可維護性以及他的美觀。那麼我們應該如何在不改變頁面的情況下,最佳化程式碼,升級頁面呢?
1.圖片地圖和CSS Sprites
如果有五個需要請求的超連結,我們可以將這五個URL放在一張圖片上,這樣的話就將五個請求轉變為了一個請求。雖然他們的原理基本一致,但是CSS Sprites是更好的選擇,首先圖片地圖中的圖片必須是連續的,而CSS Sprites並沒有這個限制,另外還有一個優點就是CSS Sprites會將降低圖片的下載量,也就是大小,因為他降低了圖片自身的開銷(顏色,格式資訊等等)。
2.內聯圖片
透過使用data:URL模式可以在Web頁面中包含圖片但無需任何額外的請求,它可以使用在任何需要URL的地方,包括SCRIPT和A標籤。
2. 大小
大小主要是HTTP傳送請求的大小,根據頁面載入請求主要透過下載HTML檔案、CSS樣式表、JavaScript指令碼、圖片、影片等資原始檔的大小來確定。這些檔案的大小會直接影響頁面載入速度和效能表現,因此在最佳化網站效能時需要考慮減小這些檔案的大小。採取壓縮檔案,延遲載入等策略,可以有效減小檔案大小,提高頁面載入速度,同時也能減少對網路頻寬的消耗。透過最佳化檔案大小,可以提升網站的使用者體驗和效能表現。
1.使用gzip進行檔案壓縮
gzip是目前最流行的壓縮方式之一,相比於zip和deflate,他的壓縮效果更好,壓縮通常能將響應的資料量減少70%,這是根據Steve統計的資料得出的,但是壓縮也會出現問題,就是當瀏覽器透過代理傳送請求時,第一個請求來自於不支援gzip的瀏覽器,所以快取為空,代理將請求傳送到web伺服器時,伺服器的響應式未被壓縮的。這就沒有了壓縮的響應被代理快取起來傳送給瀏覽器,如果反過來請求,則情況可能會更嚴重。解決的辦法就是在web伺服器的響應中新增vary頭,可以告訴代理根據一個或多個請求頭來改變快取的響應。
2.將樣式表放在頂部,指令碼放在最後
相信我們都遇到過一個現象就是,在等待頁面載入過程中,頁面會先白屏然後突然把所有的東西都載入出來了,這就是因為把樣式表放在了最後,導致樣式是最後載入的,而白屏是對無樣式內容閃爍的一種彌補,那麼什麼是無樣式內容閃爍,當頁面的內容載入時,文字首先出現,然後是圖片,最後又用樣式重新描繪了文字和圖片,具體效果可以看CSS Flash of Unstyled Content (stevesouders.com)。事實上,把樣式表放在最後,加快了整個頁面的響應,但從使用者的角度來看,頁面載入時間更長了,這就是逐步呈現的好處,使用者希望儘快能看到頁面,就像你在完成一個專案時,希望最快的看到收益,這個原理是一樣的,當我們把樣式表放在開頭時,他會先下載樣式表,儘管這不是頁面所必須的,但是他能讓使用者感覺到頁面更快的載入出來了,所以我們可以使用LINK標籤將樣式表放在文件HEAD中。
3.距離
相信我們都會有過這樣的體驗,當我們身處一個偏遠地區的時候,我們的網路會比較差,我們身處電信,聯通等的服務中心時,網路會變得快些。這就說明,當我們身處不同的地理位置時,網路請求響應的速度也不同,對於一個網頁,當應用程式web伺服器更近的時候,頁面響應的就越快,另一方面秒如果元件web伺服器離使用者更近,則多個HTTP請求的響應時間將縮短。那麼如何縮短響應的距離呢?
使用內容釋出網路
內容釋出網路時一組分佈在多個不同地理位置的Web伺服器,用於更加有效地向使用者釋出內容。根據我的理解,使用CDN就相當於為整個伺服器籠罩了一層大的網路架構,當使用者請求網頁時,不用請求這個伺服器的中心,而是透過訪問這個架構距離你最近的邊緣,這樣的話,就縮短了訪問的距離。他除了能縮短響應時間之外,還有其他的優勢,比如備份,擴充套件儲存能力和進行快取,緩和web流量峰值壓力,提供高可用性和可靠性、減輕源伺服器負載、防止DDoS攻擊等功能。當然,他也有缺點就是:你的響應時間可能會受到其他網站影響,尤其是在共享CDN服務的情況下,當某個網站流量過大或發生故障時,可能會影響到其他使用該CDN的網站的效能。總的來說,使用CDN是提高網站效能和使用者體驗的有效方法,尤其對於全球範圍的網站或服務來說,可以顯著減少網路延遲,提高訪問速度
4.快取
我們是否有過這樣的感覺,當你第一次訪問一個網站和多次訪問一個網站時,網站的載入速度是不一樣的,這是因為當我們第一次訪問的時候,載入了更多的http請求,就如同規則一那樣,在理想情況下,我們不使用任何圖片,任何指令碼,任何樣式的時候,他的載入速度是最快的。但這樣不現實,於是,利用快取就可以縮短響應時間。
1.新增Expries頭
快取是有限的,就像頁面淘汰一樣,當我們一個月不訪問,或是訪問多個網站,我們第一次被訪問的網站的快取就會被刪除,所以,利用Expires頭就是為了我們的快取能更長久的存在,Expires的弊端就是需要與我們的系統時間保持高度一致,因為他是以日期的形式儲存的,於是就有了另一個Cache-Control max-age這個頭,可以透過設定時間來保證我們快取的存在時間,透過這兩個請求頭的組合,就可以大大增加我們的快取,在一定程度上會縮短我們的響應時間。
2.使Ajax可快取
Ajax是一種在不重新載入整個頁面的情況下,透過非同步請求與伺服器交換資料的技術。然而,如果Ajax請求的響應不能被快取,就會導致每次請求都需要從伺服器獲取資料,增加了網路傳輸時間和伺服器負擔,影響了網站的載入速度和響應時間。透過使Ajax請求可快取,可以有效地利用瀏覽器和代理伺服器的快取機制,將Ajax請求的響應結果快取起來。當下次相同的Ajax請求發起時,可以直接從快取中獲取響應資料,而無需再次向伺服器請求,從而減少網路傳輸時間和提高響應速度。
本文探討了前端工程師在建設高效能網站中的關鍵角色以及最佳化前端效率對網站效能的重要性。主要從數量、大小、距離和快取四個方面對高效能網站的建設提供了方法。是在看完《高效能網站建設指南》後,對其的一些總結與分類,本文涉及的方法是主要的方面,涉及到軟體質量屬性中的效能,可靠性,可用性,功能性等,文章中缺少的相關佐證的例項,可以去看《高效能網站建設指南》對應的部分,作者Steve都給出了相關的例項以及資料,希望本文可以對讀者關於前端網站建設有所幫助。