大型的web引用對(duì)于速度的追求不僅僅局限于瀏覽器緩存,瀏覽器緩存只是為了提升二次訪問的速度。對(duì)于首次訪問我們需要從網(wǎng)絡(luò)層面進(jìn)行。最常見的手段就是CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò))加速,通過將靜態(tài)資源緩存到距離用戶很近的相同網(wǎng)絡(luò)運(yùn)營商的CDN節(jié)點(diǎn)上,不但可以提升用戶訪問的速度,還能節(jié)省服務(wù)器的帶寬消耗。降低負(fù)載。
不同地區(qū)的用戶訪會(huì)訪問到離自己最近的相同網(wǎng)絡(luò)線路上的CDN節(jié)點(diǎn),當(dāng)請(qǐng)求達(dá)到CDN節(jié)點(diǎn)后,節(jié)點(diǎn)會(huì)判斷自己的內(nèi)容緩存是否有效。如果有效則立即響應(yīng)緩存內(nèi)容給用戶,從而加快響應(yīng)速度。如果CDN節(jié)點(diǎn)的緩存失效,他會(huì)根據(jù)服務(wù)器配置去我們的內(nèi)容源服務(wù)器獲最新的資源響應(yīng)給用戶。并將內(nèi)容緩存下來以便給后續(xù)訪問的用戶。因此,一個(gè)地區(qū)只要有一個(gè)用戶先加載資源在CDN中建立了緩存。該地區(qū)的其他后續(xù)用戶都能因此受益
為了使用CDN網(wǎng)絡(luò)緩存,靜態(tài)資源部署的時(shí)候要做兩項(xiàng)改變:
將靜態(tài)資源部署到不同那個(gè)網(wǎng)絡(luò)線路的服務(wù)器中,以加速對(duì)應(yīng)網(wǎng)絡(luò)中CDN節(jié)點(diǎn)無緩存是的溯源速度
加載靜態(tài)資源時(shí)使用與頁面不同的域名,一方面是便于接入為CDN而設(shè)置的智能DNS解析服務(wù)。另一方面因?yàn)殪o態(tài)資源和主頁不同于。這樣加載靜態(tài)資源的HTTP請(qǐng)求就不會(huì)帶上主頁面中的Cookie等數(shù)據(jù)。較少了數(shù)據(jù)傳輸量。又進(jìn)一步加快網(wǎng)絡(luò)訪問。
項(xiàng)目部署CDN
創(chuàng)建桶,自定義CDN域名什么的巴拉巴拉…不是重點(diǎn),自行創(chuàng)建吧。
npm i cos-webpack
或者
npm i tencent-cloud-webpack-plugin
// 引入
const CosPlugin = require('cos-webpack')
// 這里用項(xiàng)目名加上時(shí)間戳用來在騰訊云中區(qū)分標(biāo)識(shí)
const fileName = 'projectName/' + new Date().getTime()
const cosPlugin = new CosPlugin({
secretId: xxx,
secretKey: xxx,
bucket: xxx,
region: xxx,
path: fileName
});
module.exports = {
output: {
publicPath: IS_PROD ? tencent.cdnPath + fileName + '/dist' : '/', // tencent.cdnPath 要指向 COS(或自定義的)域名地址
outputDir: 'dist',
assetsDir: 'static',
},
plugins: [
cosPlugin
]
}
build之后,查看打包的文件是否上傳到你指定的cos文件中,然后將本地打包的文件發(fā)布到你自己的服務(wù)器。這個(gè)時(shí)候使用域名訪問,可以在netWork中看到,所有的鏈接都走得是CDN鏈接了。
配置項(xiàng)
secretId COS SecretId
secretKey COS SecretKey
bucket COS 存儲(chǔ)對(duì)象名稱,格式為對(duì)象名稱加應(yīng)用 ID,如:bucket-1250000000
region COS 存儲(chǔ)地域,參見官方文檔
path 存儲(chǔ)路徑, 默認(rèn)為 [hash],也可以指定 hash 長度,如: [hash:8]
exclude 可選,排除特定文件,正則表達(dá)式,如: /index.html$/
include 可選,指定要上傳的文件,正則表達(dá)式,如: /app.js$/
batch 可選,批量上傳文件并發(fā)數(shù),默認(rèn) 20
在iOS中有H5加載慢的問題,可以嘗試Nginx開啟OCSP stapling。我目前還沒開啟。不知道會(huì)不會(huì)有什么問題。后續(xù)如果開啟了再補(bǔ)充。如果哪位大佬對(duì)這塊比較熟悉,大家可以交流交流