2020-10-27 1.前端性能優(yōu)化 - 靜態(tài)資源優(yōu)化

靜態(tài)資源優(yōu)化

  1. JPEG: 對(duì)彩色照片而廣泛使用的有損壓縮圖形格式

    • 不適合: 線條圖形或者文字, 圖標(biāo)圖形, 因?yàn)閴嚎s算法不太適合這種類型, 并且不支持透明度
    • 適合: 顏色豐富的圖片, 彩色圖大焦點(diǎn)圖, 通欄banner圖, 結(jié)構(gòu)不規(guī)則的圖形
  2. PNG: 無(wú)損壓縮的位圖圖形格式, 支持索引, 灰度, RGB三種顏色以及Alpha通道特性

    • 不適合: 無(wú)損壓縮所以彩色圖像體積圖像太大, 不太適合
    • 適合: 純色, 透明, 線條繪圖, 圖標(biāo), 邊緣清晰, 有大塊相同顏色的區(qū)域, 顏色數(shù)少, 但需要透明
  3. Gif: 以8位色重現(xiàn)真彩色的圖像, 僅僅支持完全透明和完全不透明, 如果需要比較通用的動(dòng)畫(huà), gif是唯一選擇

    • 不適合: 每個(gè)像素只有8個(gè)比特位, 不適合存儲(chǔ)彩色圖片
    • 適合: 動(dòng)畫(huà), 圖標(biāo)
  4. webp現(xiàn)代圖像格式, 可為圖像提供無(wú)損壓縮和有損壓縮, 非常靈活

    • 同時(shí)保證一定程序上圖像質(zhì)量和比較小的體積, 可以插入多幀, 實(shí)現(xiàn)動(dòng)畫(huà)效果; 可以設(shè)置透明度; 采用8位壓縮算法; 無(wú)損的webp比PNG小26%; 有損的webp比JPEG小25-34%; 比gif更好的動(dòng)畫(huà)
    • 不適用: 最多處理256色, 不適合于彩色圖片
    • 適合: 圖形和半透明圖形
  5. 用工具進(jìn)行圖片壓縮

    • 壓縮png
      • npm install -g node-pngquant-native jdf-png-native
      • 跨平臺(tái), 壓縮比高, 壓縮png24非常好
    • 壓縮jpg
      • npm install -g jpegtran
      • 跨平臺(tái)
    • 壓縮gif
      • Gifsicle: 通過(guò)改變每幀的比例, 減小gif文件大小, 同時(shí)可以使用透明來(lái)達(dá)到更小的文件大小
      • 使用方式
        • 優(yōu)化級(jí)別設(shè)置為不小于2, 1的話基本不壓縮 gifsicle --optimize=3 out.gif in.gif
        • 將透明部分截去掉: gifsicle --optimize=3 --crop-transparency out.gif in.gif
  6. 圖片尺寸隨著網(wǎng)絡(luò)環(huán)境的變化

    • 不同的網(wǎng)絡(luò)環(huán)境, 加載不同尺寸和像素的圖片, 通過(guò)在圖片url后綴加上不同的參數(shù)改變
  7. 響應(yīng)式圖片

    • JavaScript綁定事件檢測(cè)窗口大小
    • css媒體查詢
    • img標(biāo)簽屬性 (srcset)
  8. 逐步加載圖像

    • 統(tǒng)一占位符
    • 使用LQIP
      • 低質(zhì)量圖像占位符
      • npm install lqip
    • 使用SQIP
      • 基于SVG的圖像占位符
      • npm install sqip
  9. 更好的解決方案

    • WebFont代替圖片(圖標(biāo), 切圖等)
    • 使用Data URI代替圖片(Base64)
    • 采用Image Spriting
  10. 圖片服務(wù)器自動(dòng)優(yōu)化解密

    • 圖片服務(wù)器自動(dòng)優(yōu)化是可以在圖片url鏈接上增加愛(ài)不同特殊的參數(shù), 服務(wù)器自動(dòng)生成

    • 不同格式, 大小, 質(zhì)量的圖片

    • 處理方式:

      • 圖片裁剪: 按照長(zhǎng)邊, 短邊, 天聰, 拉伸等縮放
      • 圖片格式轉(zhuǎn)換: 支持png,gif,jpg,webp等不同圖片的壓縮率
      • 圖片吹: 添加圖片水印, 高斯模糊, 重心處理, 裁剪變寬等
      • AI能力: 鑒別黃以及智能摳圖, 智能排版,智能配色, 智能合成等AI
  11. html優(yōu)化

    • 精簡(jiǎn)代碼, 減少嵌套

    • 減少dom節(jié)點(diǎn)數(shù)

    • 減少無(wú)語(yǔ)義代碼

    • 刪除http或http (URL與當(dāng)前協(xié)議頭一致的時(shí)候, 或者此url在多個(gè)協(xié)議頭都可以用的時(shí)候)

    • 刪除多余空格, 換行, 縮進(jìn)

    • 刪除冗余標(biāo)簽屬性

    • 使用相對(duì)路徑url

    • css文件盡量放在頁(yè)面頭部

      • css加載不會(huì)阻塞dom解析,但是會(huì)阻塞dom tree渲染, 也會(huì)阻塞后面js的執(zhí)行
      • 任何body元素之前, 可以確保在部分中解析所有css樣式, 從而減少了瀏覽器重排文檔的次數(shù)
      • 如果放置在頁(yè)面底部 那要等待嘴壺一個(gè)css文件下載完成, 此時(shí)出現(xiàn)白屏
    • JS引用放在HTML底部

      • 放置js的加載, 解析, 執(zhí)行對(duì)阻塞頁(yè)面的元素正常渲染
    • 增加用戶體驗(yàn)

      • 設(shè)置favicon.ico
      • 增加首屏必要的css和js (骨骼屏)
  12. css優(yōu)化

    • 提升CSS渲染性能
      • 謹(jǐn)慎使用expensive屬性, 如:nth-child偽類, position:fixed;定位
      • 盡量減少樣式層級(jí)數(shù), 如 div ul li span i {color: blue;}
      • 盡量避免使用占用更多CPU和內(nèi)存的屬性, text-indent: -9999px;
      • 盡量避免使用耗電量大的屬性, 比如CSS3 3D transforms css transitions, Opacity
    • 合理使用css選擇器
      • 盡量避免使用CSS表達(dá)式: background-color: expression(Math.random() > 0.5 ? 'red' : 'blue')
      • 盡量避免使用通配符選擇器
      • 盡量避免類正則的屬性選擇器
    • 提升CSS加載文件的性能
      • 使用外鏈的css
      • 避免使用@import (阻塞css文件的加載和js文件)
    • 精簡(jiǎn)css代碼
      • 縮寫(xiě)語(yǔ)句
      • 刪除不必要的0
      • 刪除不必要的單位
      • 刪除過(guò)多的分好, kongge,述職
      • 減少樣式表的大小(壓縮)
    • 合理使用webFonts
      • 將字體部署到CDN上
      • 將字體以BASE64的形式保存在css中, 通過(guò)localStorage進(jìn)行緩存
      • Google字體因?yàn)槟承┎豢煽咕茉? 應(yīng)該使用國(guó)內(nèi)托管服務(wù)
    • CSS動(dòng)畫(huà)優(yōu)化
      • 盡量避免使用動(dòng)畫(huà)
      • 延遲動(dòng)畫(huà)初始化
      • 結(jié)合SVG
  13. 提升JS文件加載性能

    • 加載元素的順序 Js文件放在body
    • js變量和函數(shù)優(yōu)化
      • 盡量使用id選擇器
      • 避免使用eval
      • js函數(shù)保持簡(jiǎn)介
      • 使用事件節(jié)流函數(shù)和事件委托
    • JS動(dòng)畫(huà)優(yōu)化
      • 避免使用大量JS動(dòng)畫(huà)
      • 盡量使用CSS3動(dòng)畫(huà)
      • 盡量使用Canvas動(dòng)畫(huà)
      • 合理使用requestAnimationFrame動(dòng)畫(huà)代替setTimeout, setInterval
    • 合理使用緩存
      • 合理緩存DOM對(duì)象
      • 緩存列表長(zhǎng)度
      • 使用可緩存的Ajax
  14. 對(duì)Javascript進(jìn)行緩存

    • 對(duì)Cookie設(shè)置有效時(shí)間
    • sessionStorage 頁(yè)面與頁(yè)面之間的傳值
    • indexDB 索引數(shù)據(jù) (沒(méi)有網(wǎng)絡(luò)的情況下可以使用, 石墨文檔等)
    • localStorage 瀏覽器存儲(chǔ)值
      • 緩存靜態(tài)文件內(nèi)容(JS/css)
      • 緩存補(bǔ)償變更的API接口數(shù)據(jù)
      • 存儲(chǔ)地理位置信息
      • 瀏覽在頁(yè)面的具體位置
  15. JS模塊化加載方案和選型

    • commonjs
    • amd
    • cmd
    • es6
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末覆旱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庸追,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碌尔,死亡現(xiàn)場(chǎng)離奇詭異或渤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)淹仑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肺孵,“玉大人匀借,你說(shuō)我怎么就攤上這事∑骄剑” “怎么了吓肋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瑰艘。 經(jīng)常有香客問(wèn)我是鬼,道長(zhǎng)肤舞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任均蜜,我火速辦了婚禮李剖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘囤耳。我一直安慰自己篙顺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布紫皇。 她就那樣靜靜地躺著慰安,像睡著了一般。 火紅的嫁衣襯著肌膚如雪聪铺。 梳的紋絲不亂的頭發(fā)上化焕,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音铃剔,去河邊找鬼撒桨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛键兜,可吹牛的內(nèi)容都是我干的凤类。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼普气,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谜疤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起现诀,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夷磕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后仔沿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體坐桩,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年封锉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绵跷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡成福,死狀恐怖碾局,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奴艾,我是刑警寧澤擦俐,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站握侧,受9級(jí)特大地震影響蚯瞧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜品擎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一埋合、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萄传,春花似錦甚颂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至衍菱,卻和暖如春赶么,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脊串。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工辫呻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琼锋。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓放闺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缕坎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怖侦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348