當用戶(hù)訪(fǎng)問(wèn)網(wǎng)頁(yè)時(shí),最直觀(guān)的感覺(jué)是網(wǎng)頁(yè)內容的速度。我們需要做的優(yōu)化工作主要是為了這個(gè)目的。那么如何提高頁(yè)面加載(或呈現)速度呢?一般來(lái)說(shuō),有三個(gè)方面:
1、代碼邏輯:優(yōu)秀的代碼邏輯結構可以有效地減少呈現頁(yè)面(如虛擬DOM)時(shí)使用的內存和速度,這超出了本文的范圍。
2、SSR服務(wù)器渲染,也稱(chēng)為“直接輸出”。在服務(wù)器端將第一個(gè)屏幕的所有內容呈現為HTML靜態(tài)代碼后,可以直接輸出到瀏覽器,有效地加快了用戶(hù)訪(fǎng)問(wèn)站點(diǎn)時(shí)第一個(gè)屏幕的加載時(shí)間。但是,這方面不在本文的范圍內。
3、本文將討論提高靜態(tài)文件的加載速度,大致分為以下幾點(diǎn):
減少靜態(tài)文件請求的數量,從而減少請求的數量(請求的成本高于移動(dòng)頁(yè)面的網(wǎng)絡(luò )速度)
(1)代碼壓縮是最常見(jiàn)的優(yōu)化方法之一。
在平時(shí)開(kāi)發(fā)時(shí),JS腳本文件和CSS樣式文件中的代碼將基于特定的代碼規范(如javascript標準樣式),以提高項目的可維護性和團隊合作的效率。但是在項目發(fā)布到Internet上之后,客戶(hù)機(瀏覽器)會(huì )識別這些代碼。此時(shí),不需要代碼命名規范和空間縮進(jìn)。我們可以使用工具來(lái)混淆和壓縮這些代碼,以減小靜態(tài)文件的大小。這里我們選擇使用Webpack,稍后將介紹它。
(2)文件合并在NPM中非常流行。在前端項目開(kāi)發(fā)中,經(jīng)常使用很多第三方代碼庫,如jquery、axios、weixinJSsdk、lodash、bootstrap等。每個(gè)庫都有自己的腳本或樣式文件。最古老的方法是,我們將標簽單獨引入這些庫中,從而在打開(kāi)頁(yè)面時(shí)產(chǎn)生幾十個(gè)請求,這對于移動(dòng)端來(lái)說(shuō)是不可接受的。
(3)GZIP
經(jīng)過(guò)壓縮合并后,文件的大小和數量得到了客觀(guān)的減少。但是,一旦站點(diǎn)有了更多的業(yè)務(wù)邏輯,或者引入了更多的第三方庫,文件的大小對于移動(dòng)端仍然不樂(lè )觀(guān)。
現在是gzip壓縮出現的時(shí)候了。~我們在Webpack的配置中添加了gzip壓縮配置。
(4)為什么cdn和cache使用cdn?
cdn是一個(gè)全球(或國內,特定于供應商)的分布式網(wǎng)絡(luò ),它可以更快地將網(wǎng)站的內容傳輸到服務(wù)范圍內的特定位置,并且通常該特定位置遠離實(shí)際的內容服務(wù)器。例如,在極端情況下,您的網(wǎng)站托管在愛(ài)爾蘭(海南),您的用戶(hù)訪(fǎng)問(wèn)澳大利亞(MOHE)。此時(shí),當您的用戶(hù)訪(fǎng)問(wèn)您的網(wǎng)站時(shí),延遲將非常大,將您的(靜態(tài))數據放在澳大利亞(MOHE)的cdn上將大大提高用戶(hù)訪(fǎng)問(wèn)該網(wǎng)站的體驗。如果沒(méi)有cdn服務(wù),我們可以添加expires頭,減少dns查找,配置etag,并使ajax可緩存。
(5)安全:
CSPWeb前端必須熟悉XSS安全漏洞。我們知道,javascript語(yǔ)句甚至CSS表達式都可能導致XSS攻擊,許多前端現在使用CSP策略來(lái)限制腳本源代碼防御。