合并HTTP請求是否真的有意義?
感興趣的朋友可以研究一下當前各大網(wǎng)站的前端源代碼,你會發(fā)現(xiàn)這些大型網(wǎng)站在前端領域做了很多優(yōu)化以最大限度提升性能。
以淘寶為例,我們可以看到它的源碼里將很多JS文件以一個script標簽引入(即script標簽里的src屬性里有多個半角逗號隔開的文件路徑),而不是傳統(tǒng)的每一個js用一個script標簽引入,這是啥操作呢?其實這就是所謂的請求合并。
什么是請求合并?所謂請求合并其實就是將多個同類型的資源一次性的向服務器端發(fā)出請求,然后一起由服務器端返回給客戶端,而不是每個資源都單獨向服務器發(fā)出請求。
這里強調(diào)了是同類型的資源(如CSS和CSS,JS和JS文件),其實不同類型的資源也可以合并,但為了確保數(shù)據(jù)解析正確還是建議同類型資源請求合并。
為什么要請求合并?想要弄清楚這個問題,我們得先了解HTTP請求的過程:
看似簡單的HTTP請求卻經(jīng)過了這么多步聚,每個步聚都是要消耗時間的。如果我們將多個請求合并為一個請求,那就節(jié)省了很多中間環(huán)節(jié)消耗的時間,從而大大加快了資源的下載速度、網(wǎng)頁的渲染速度。
另外,每種瀏覽器都是有并發(fā)數(shù)限制的,這就意味著如果頁面上的靜態(tài)資源過多,而瀏覽器一次最多只能處理幾個請求,其它的請求全都處于阻塞等待中,使得頁面渲染速度慢。所以說請求合并對于大型網(wǎng)站而言是必須要做的優(yōu)化措施。
請求合并的原理請求合并的實施是需要服務器端支持的,服務器端獲取到請求文件時先判斷是否滿足特定的格式(比如文件名中是否存在半角逗號分隔符等),如果存在則根據(jù)分隔符將文件名分割成多個文件路徑,然后在服務器端找到對應的文件后將內(nèi)容拼接在一起返給客戶端。
比如Nginx就有一個mod_concat模塊來實現(xiàn)請求合并,Tengine默認就有此模塊,大家可以嘗試一下。
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區(qū)交流 ~ 我是科技領域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗,歡迎關注我了解更多科技知識!