天天看點

網絡加速手段之一,JS檔案資源合并下載下傳

版權聲明: 本文由 一隻部落格 發表于 bloghome部落格 文章連結: https://www.bloghome.com.cn/user/cnn237111

有過ftp下載下傳檔案經驗的人都有體驗,單獨下載下傳一個100m的檔案比分開下載下傳100個1m的檔案速度快很多,這是因為下載下傳需要解析域名,建立連接配接等額外開銷的時間,是以下載下傳100個檔案就要做100次這種額外的開銷。是以如果把這個100個檔案整合成一個檔案下載下傳速度會快很多。

基于上述的方法,可以對html中的js檔案也做類似的處理,無論js檔案多少個,通過配置檔案,把n個js檔案合并到一個檔案下載下傳。實作手段通過httphandler。具體代碼如下:

web.config檔案中:

隻對mergedjs.js的請求檔案作合并,具體請求到哪個檔案,有querystring參數給定,比如本例中使用mergedjs.js?jsid=myjs這種方式。對于其他類型的js檔案,則按照iis預設的請求方式處理。

上述配置,主要用來指定myjs使用哪些檔案來合并。

mergejs.getjs 這個httphandler主要用來處理js。此處涉及到一個緩存的問題,通常情況下,js檔案會預設緩存在本地浏覽器緩存中,但是對于mergedjs.js這種通過httphandler所處理的,被視為動态内容,并不會緩存在浏覽器中,而是每次都會從伺服器端擷取最新的内容。是以可以通過編碼,強制使用浏覽器緩存。

由于反複讀取js所做io操作也是性能瓶頸,是以在global中首先将所有的js預讀存在dictionary中,用的時候直接從dictionary中輸出,避免了io操作。代碼能夠判斷js檔案是否做了修改,如果修改了,dictionary中的值也會得到更新。

handler處理部分的代碼如下:

效果如下:使用組合下載下傳的情況,js的下載下傳耗費時間73ms。

網絡加速手段之一,JS檔案資源合并下載下傳

但是分開下載下傳的話就比較耗時。

網絡加速手段之一,JS檔案資源合并下載下傳

當然,并不是合并為一個檔案,下載下傳的速度就一定快,具體的下載下傳速度和政策還受到浏覽器的影響,有的浏覽器同時開的請求線程多,也會影響下載下傳速度。但是總體來說,如果檔案數多的話,下載下傳單一檔案總會快點的。