前端網(wǎng)站性能優(yōu)化

此情無(wú)計(jì)可消除瓦盛,才下眉頭,又上心頭走贪。

我的github: 李大玄
我的私人博客: 李大玄
我的npm開源庫(kù): 李大玄
我的簡(jiǎn)書: 李大玄
我的CSDN: 李大玄
我的掘金: 李大玄
嗶哩嗶哩: 李大玄

1. 首先減少http請(qǐng)求, 首先是圖片請(qǐng)求
  1-1.將項(xiàng)目中的圖片盡量使用為icon 
  1-2.圖片地圖<map><area/></map> 
  1-3.還有精靈圖(css-sprites)  
  1-4.圖片壓縮 壓縮后的圖片大小會(huì)減少
  1-5.小于300k的圖片進(jìn)行壓縮 減少http請(qǐng)求 在webpack中可以配置
  1-6.合并腳本和樣式表 因?yàn)槎际峭饴?lián)進(jìn)來(lái)的 每一個(gè)文件都需要加載 合并之后減少請(qǐng)求量

2. 使用內(nèi)容發(fā)布網(wǎng)絡(luò)
  2-1.使用CDN, 將一些資源放在cdn進(jìn)行引入,發(fā)布靜態(tài)內(nèi)容
  2-2.節(jié)省,將資源放在單獨(dú)的服務(wù)器上

3.添加 Expires Header
  3-1.瀏覽器使用緩存來(lái)減少http請(qǐng)求的數(shù)量,減少http的響應(yīng)大小
      如果為頁(yè)面中的一個(gè)圖片返回了這個(gè)頭,瀏覽器在后續(xù)的頁(yè)面瀏覽中會(huì)使用緩存的圖片
  3-2.max-age  mod_expires 
    瀏覽器再次請(qǐng)求服務(wù)器時(shí)壳猜,瀏覽器會(huì)先判斷max-age谷誓,如果到期則直接請(qǐng)求服務(wù)器,否則直接從緩存中取番舆,
    mod_expires Apache模塊,在使用ExpiresHeader 時(shí)能夠像max_age那樣設(shè)置日期,通過(guò) Expires Default 指令來(lái)完成
    (如果在規(guī)定的時(shí)間內(nèi),需要發(fā)版,但是有緩存任務(wù)的時(shí)候,可以使用生成新連接的方法進(jìn)行資源重新請(qǐng)求)
4.壓縮組件
  4-1. Accept-Encoding: gzip, deflate (客戶端列出來(lái)的方法中的一種進(jìn)行壓縮響應(yīng))
    很多瀏覽器不支持deflate,但是支持 gzip
    很多網(wǎng)站會(huì)壓縮HTML文檔,但是像腳本和樣式表,XML和JSON 都值得壓縮
    圖片和PDF不應(yīng)該壓縮,因?yàn)槎际菈嚎s過(guò)的 壓縮只會(huì)浪費(fèi)CPU資源,還可能會(huì)增加文件大小
    gzip能將響應(yīng)整體減少66%, deflate能減少60%
  4-2. 配置
    配置gzip時(shí)使用的模塊取決于Apache的版本 
      Accept1.3使用mod_gzip
      Accept2.x使用mod_deflate 
  4-3.代理緩存
    Vary: Accept-Encoding
  4-4.邊緣情形
    服務(wù)器和客戶端的壓縮對(duì)等性看似簡(jiǎn)單,但必須正確才行酝碳。無(wú)論是客戶端還是服務(wù)器發(fā)生錯(cuò)誤,頁(yè)面都會(huì)被破壞恨狈,
    錯(cuò)誤不會(huì)經(jīng)常發(fā)生疏哗,但是需要考慮。

5.將樣式表放在頂部
  5-1.將DHTML 特征的樣式表放在文檔頂部,加載更快, 反之放在后面加載更慢
  5-2.逐步呈現(xiàn)
    將樣式表放在文檔底部會(huì)導(dǎo)致瀏覽器中阻止內(nèi)容逐步呈現(xiàn),為避免當(dāng)樣式變化時(shí)重繪頁(yè)面中的元素,
    瀏覽器會(huì)阻塞內(nèi)容逐步呈現(xiàn).
  5-3.sleep.cgi
  5-4.將css放在頂部
    為了避免頁(yè)面白屏,將樣式表放在頂部,這樣叫做(css at the top),不管頁(yè)面是如何加載的,窗口新開,重新加載,頁(yè)面都會(huì)逐步呈現(xiàn)
    一個(gè)style模塊可以包含多個(gè)@import 但是@import必須放在所有其他規(guī)則之前
    @import有可能導(dǎo)致白屏,即便把@import放在文檔的head標(biāo)簽中也是如此
  5-5.無(wú)樣式內(nèi)容的閃爍
    樣式表在頁(yè)面中的位置并不影響下載時(shí)間,但是會(huì)影響頁(yè)面的呈現(xiàn)

6.將腳本放在底部 可以提高下載的并行度
  6-1.腳本帶來(lái)的問(wèn)題
  6-2.并行下載
  6-3.腳本阻塞下載
  6-4.最差情況: 將腳本放在頂部
  6-5.最佳情況: 將腳本放在底部

7.避免css 表達(dá)式  CSS表達(dá)式是動(dòng)態(tài)設(shè)置css屬性的一種強(qiáng)大 并且危險(xiǎn)的方式.
  7-1.一次性表達(dá)式 防抖節(jié)流
  7-2.事件處理
  7-3.沒(méi)有深入了解底層影響的情況下使用css表達(dá)式是很危險(xiǎn)的

8.使用外部JavaScript 和 css
  8-1.純粹而言,在HTML文檔中寫js與css 加載更快,因?yàn)闇p少了http請(qǐng)求 30% ~ 50%
  8-2.組件重用
    如過(guò)網(wǎng)站每個(gè)頁(yè)面使用了想通的js和css,那么使用外部文件可以提高這些組件重用率.Expires
    如果重用性底,還是內(nèi)聯(lián)更有意義
  8-3.典型的對(duì)比結(jié)果
    
9.減少DNS查找
  Internet是通過(guò)IP地址來(lái)查找服務(wù)器的,猶豫IP地址很難記,太長(zhǎng)使用包含主機(jī)名的URL來(lái)取代她
  dns也是開銷,通常瀏覽器查找一個(gè)給定的主機(jī)名的IP地址要花費(fèi)20~120毫秒
  9-1.DNS緩存和TTL
    DNS查找可以被緩存起來(lái)以提高性能

10. 精簡(jiǎn)JavaScript
  10-1.混淆是可以應(yīng)用在源代碼上的另一種優(yōu)化方式.和精簡(jiǎn)一樣,他會(huì)移除注釋和空白,同事他還會(huì)改寫代碼.
  也就是壓縮js
  10-2.精簡(jiǎn)css #000000 => #000  0代替0px

11. 避免重定向
  每一個(gè)請(qǐng)求都是要消費(fèi)時(shí)間的

12. 避免重復(fù)腳本
  12-1.在頁(yè)面沖多次包含相同的腳本回事頁(yè)面變慢
  12-2.在Internet Explorer中,如果腳本沒(méi)有被緩存,或在重新加載頁(yè)面時(shí),會(huì)產(chǎn)生額外的HTTP請(qǐng)求
  12-3.在Firefox 和 Internet Explorer中,腳本會(huì)被多次請(qǐng)求

13. 使用ETag 沒(méi)看

14. 使ajax 可緩存
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末禾怠,一起剝皮案震驚了整個(gè)濱河市返奉,隨后出現(xiàn)的幾起案子贝搁,更是在濱河造成了極大的恐慌,老刑警劉巖芽偏,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雷逆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡污尉,警方通過(guò)查閱死者的電腦和手機(jī)膀哲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)被碗,“玉大人等太,你說(shuō)我怎么就攤上這事÷牛” “怎么了缩抡?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)包颁。 經(jīng)常有香客問(wèn)我瞻想,道長(zhǎng),這世上最難降的妖魔是什么娩嚼? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任蘑险,我火速辦了婚禮,結(jié)果婚禮上岳悟,老公的妹妹穿的比我還像新娘佃迄。我一直安慰自己,他們只是感情好贵少,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布呵俏。 她就那樣靜靜地躺著,像睡著了一般滔灶。 火紅的嫁衣襯著肌膚如雪普碎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天录平,我揣著相機(jī)與錄音麻车,去河邊找鬼。 笑死斗这,一個(gè)胖子當(dāng)著我的面吹牛动猬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播表箭,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赁咙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起序目,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤臂痕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后猿涨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體握童,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年叛赚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澡绩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俺附,死狀恐怖肥卡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情事镣,我是刑警寧澤步鉴,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站璃哟,受9級(jí)特大地震影響氛琢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜随闪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一阳似、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铐伴,春花似錦撮奏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至即供,卻和暖如春定拟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逗嫡。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留株依,地道東北人驱证。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恋腕,于是被迫代替她去往敵國(guó)和親抹锄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容