知è˜
ä¸ç®¡æ˜¯ç¶²(wÇŽng)站,軟件還是å°ç¨‹åºï¼Œéƒ½è¦ç›´æŽ¥æˆ–間接能為您產(chÇŽn)生價(jià )值,我們在追求其視覺表ç¾(xià n)çš„åŒæ™‚(shÃ),更å´(cè)é‡äºŽåŠŸèƒ½çš„ä¾¿æ·ï¼Œç‡ŸéŠ·çš„ä¾¿åˆ©ï¼Œé‹(yùn)營的高效,讓網(wÇŽng)ç«™æˆç‚ºç‡ŸéŠ·å·¥å…·ï¼Œè®“è»Ÿä»¶èƒ½åˆ‡å¯¦(shÃ)æå‡ä¼æ¥(yè)å…§(nèi)éƒ¨ç®¡ç†æ°´å¹³å’Œæ•ˆçŽ‡ã€‚å„ª(yÅu)秀的程åº?yà n)楹笃è°î¥å£§å³â”憬莸闹С郑?
您當(dÄng)å‰ä½ç½®>é¦–é » æ–°èžè³‡è¨Š » å°ç¨‹åºç›¸é—œ(guÄn) >
給å°ç¨‹åºå†æ¸›é‡ 30% 的秘密?
發(fÄ)表時(shÃ)間:2021-4-22
發(fÄ)布人:葵宇科技
ç€è¦½æ¬¡æ•¸(shù):45
å‰è¨€ —
在 web 開發(fÄ)å ´æ™¯ï¼Œæ¸›å°‘ä»£ç¢¼é«”ç©é›–然是性能優(yÅu)化的一個(gè)æ–¹å‘,還沒到錙銖必較的程度。但是在å°ç¨‹åºå ´æ™¯ï¼Œç”±äºŽä»£ç¢¼åŒ…上傳階段é™åˆ¶äº†ä¸»åŒ… 2M 和總包 16M(近期微信官方æ£åœ¨å…§(nèi)測將總包上é™èª¿(dià o)整至 20M )的尺寸,超éŽå°±æœƒé¢è‡¨ç„¡æ³•發(fÄ)版的風(fÄ“ng)險(xiÇŽn),代碼包體ç©çš„優(yÅu)化就變得特別é‡è¦äº†ã€‚京喜å°ç¨‹åºé¦–é 作為微信購物的大入å£ï¼Œæ‰¿è¼‰å¤§é‡æµé‡ï¼ŒåŠŸèƒ½å¾©(fù)雜模塊眾多,åˆè¦èˆ‡å…¶ä»–æ ¸å¿ƒæ¥(yè)å‹™(wù)和公共組件共享 2M çš„ä¸»åŒ…ç©ºé–“ï¼Œå› æ¤ä»£ç¢¼åŒ…瘦身的工作在æŒçºŒ(xù)䏿–·é€²(jìn)行,å¦å‰‡ç„¡æ³•滿足æ¥(yè)å‹™(wù)的快速增長。本文將çµ(jié)åˆä»¥å¾€å„ª(yÅu)化ç–略與最近一次的瘦身實(shÃ)è¸ï¼Œåˆ†äº«å°ç¨‹åºä»£ç¢¼ç˜¦èº«çš„ç¶“(jÄ«ng)é©—(yà n)與æ€è€ƒã€‚
å¸¸è¦‹çš„ç˜¦èº«æ–¹å¼ â€”
京喜首é é …(xià ng)目是一個(gè)優(yÅu)åŒ–è‰¯å¥½çš„é …(xià ng)目,å°äºŽå¸¸è¦‹çš„優(yÅu)化措施,已經(jÄ«ng)有éŽå¾ˆå¥½çš„實(shÃ)è¸ï¼Œå°±è®“我們我們先回顧一下有哪些常見的優(yÅu)化ç–ç•¥å§ï¼š
代碼分包:將相å°ç¨(dú)ç«‹çš„é é¢å’Œçµ„件拆分到分包,å¯ä»¥è§£æ±ºä¸»åŒ…é«”ç©å—é™å•題;
ä¾è³´åˆ†æžï¼šç§»é™¤æœªå¼•用的é é¢ã€çµ„件和其他文件;
é¿å…使用本地資æºï¼šé™¤äº†å…œåº•圖片,其他都盡å¯èƒ½ä½¿ç”¨ url 的方å¼ï¼Œç”±äºŽ base64 圖本質(zhì)上是將信æ¯ç·¨ç¢¼æˆé•·å—符串,也會å 用很多空間,ä¸å»ºè°ä½¿ç”¨ï¼›
å°æ‰€æœ‰é¡žåž‹çš„æ–‡ä»¶éƒ½é€²(jìn)è¡Œå£“ç¸®å¹¶æ¸…ç†æ³¨é‡‹ï¼ŒåŒ…括了:jsã€wxmlã€wxssã€jsonï¼›
æ¤å¤–,京喜首é 團(tuán)隊(duì)é‚„é‡å° Taro 開發(fÄ)å ´æ™¯é€²(jìn)行了如下優(yÅu)化:
分æžå‡ºç·¨è¯åŽæ¯å€‹(gè)æ–‡ä»¶çš„é«˜é »é‡å¾©(fù)代碼(如處ç†å…¼å®¹æ€§çš„ pollyfill 代碼),拆分生æˆå…¬å…±æ–‡ä»¶ï¼Œæ›¿æ›åŽŸå¼•ç”¨ä»¥å¯¦(shÃ)ç¾(xià n)共用。
標(biÄo)準(zhÇ”n)和工具 —
在開始æ£å¼ä»‹ç´¹ç˜¦èº«å¯¦(shÃ)è¸ä¹‹å‰ï¼Œæˆ‘們先來明確一下代碼包體ç©çš„è¡¡é‡æ¨™(biÄo)準(zhÇ”n)和統(tÇ’ng)計(jì)æ–¹å¼å§ã€‚
å°ç¨‹åºä¸Šå‚³ä»£ç¢¼ä»¥ä»£ç¢¼åŒ…尺寸為準(zhÇ”n),所謂 2M çš„é™åˆ¶ï¼Œå°±æ˜¯æŒ‡è©²å°ºå¯¸ä¸èƒ½è¶…éŽ 2048KB。
從信æ¯å‚³è¼¸è§’度來說,Gzip ç‰å£“縮工具å¯ä»¥é€²(jìn)行很多信æ¯åŒ–編碼優(yÅu)åŒ–ï¼Œå› æ¤ä¸€äº›å…§(nèi)容é‡å¾©(fù)是å¯ä»¥å®¹å¿çš„,但是由于我們的目標(biÄo)是為了解決å°ç¨‹åºä¸Šå‚³é™åˆ¶ï¼Œå°±åªæœ‰å°ä»£ç¢¼åŒ…尺寸錙銖必較了。
在開發(fÄ)者工具-詳情-基本信æ¯-上次é (yù)覽或上次上傳,å¯ä»¥æŸ¥çœ‹åˆ°æœ€è¿‘一次的代碼包體ç©ï¼Œæœ¬æ–‡æŽ¥ä¸‹ä¾†æ‰€ä»‹ç´¹çš„優(yÅu)化都是以縮å°é€™å€‹(gè)é«”ç©ç‚ºç›®çš„。
ä½†æ˜¯ä»£ç¢¼ä¸Šå‚³ç”Ÿæˆæ¨¡æ¿é€Ÿåº¦å¾ˆæ…¢ï¼Œå¦‚æžœæ¯æ¬¡éƒ½è¦æ ¹æ“š(jù)這里的數(shù)據(jù)來統(tÇ’ng)計(jì)é«”ç©è®ŠåŒ–,效率太低了。
åœ¨æœªæ”¹å‹•é …(xià ng)ç›®é…置的情æ³ä¸‹ï¼Œæˆ‘們就å¯ä»¥é–“接以代碼目錄的文件體ç©å¤§å°ä½œç‚ºè®ŠåŒ–åƒç…§ã€‚怎么方便的統(tÇ’ng)計(jì)文件體ç©å‘¢ï¼Ÿé€™é‡Œæˆ‘用了 tree-cli [1] ,利用它æä¾›çš„åƒæ•¸(shù),å¯ä»¥è¼¸å‡ºå…·å‚™å°ºå¯¸çµ±(tÇ’ng)計(jì)和排åºåŠŸèƒ½çš„ä»£ç¢¼æ–‡ä»¶æ¸…å–®ï¼š
npm install -g tree-cli
// 目標(biÄo)目錄
cd target-directory
// 輸出文件為 size-analysis.md
tree -s --sort=size -o size-analysis.md
清單內(nèi)å®¹æ ¼å¼å¦‚下:
.
├── [ 1000] index.js
├── [ 500] index.wxss
├── [ 500] index.wxml
├── [ 500] index.json
├── [ 4000] components
│ ├── [ 4000] child
│ │ ├── [ 1000] index.js
│ │ ├── [ 1000] index.wxml
│ │ ├── [ 1000] index.wxss
└── └── └── [ 1000] index.json
6500 bytes used in 2 directories, 8 files
瘦身實(shÃ)è¸ â€”
å‰é¢èªªåˆ°äº¬å–œé¦–é 優(yÅu)化措施都åšçš„很好了,下é¢å³å°‡åˆ†äº«çš„æ˜¯ä¸€äº›ä¸é‚£ä¹ˆå¸¸è¦‹çš„優(yÅu)化方å¼ï¼Œå„ª(yÅu)化空間有大有å°ï¼Œæƒ³è¦å„ª(yÅu)化å°ç¨‹åºä»£ç¢¼åŒ…,建è°å…ˆç›¡é‡å®Œæˆå‰æ–‡æåˆ°çš„優(yÅu)化方案,這樣ç²å¾—的收益最明顯,然åŽå†ä¾†çœ‹æŽ¥ä¸‹ä¾†æåˆ°çš„這些方å¼å§~
一ã€å—體和é¡è‰²çš„全局共用
å°ç¨‹åºæ–‡æª”å…§(nèi)é—œ(guÄn)于繼承樣å¼çš„說明為:繼承樣å¼ï¼Œå¦‚ font
, color
, 會從組件外繼承到組件內(nèi)。
分æžé …(xià ng)ç›®ç¾(xià n)狀,我們通常會把å—體定義放在公共 css 文件內(nèi),隨著é 颿ˆ–組件引入公共 css,font 也將被é‡å¾©(fù)引入,å¯ä»¥é€šéŽæ”¹é€ ,把 font 的定義僅放在 app.wxss å…§(nèi)ï¼Œå–æ¶ˆçµ„ä»¶å’Œé é¢çš„引入,å¯ä»¥é”(dá)到減少整體代碼包體ç©çš„目的。
é—œ(guÄn)äºŽé€™ä¸€é …(xià ng)首é é …(xià ng)ç›®é«”ç©æ¸›å°‘ 1%,é (yù)估整個(gè)é …(xià ng)目還有 20kb å·¦å³çš„ font å®šç¾©å¯æ¸…ç†ã€‚
如果有全局的é¡è‰²å®šç¾©ï¼Œä¹Ÿå¯ä»¥é€²(jìn)行類似的優(yÅu)化。
äºŒã€æ¨£å¼è£œ(bÇ”)全功能的使用
作為 web 開發(fÄ)è€…ï¼Œå° -webkit- 這種å‰ç¶´ä¸€å®šä¸é™Œç”Ÿï¼Œç‚ºäº†é©é…ä¸åŒç€è¦½å™¨å…§(nèi)æ ¸ï¼Œé€šå¸¸æˆ‘å€‘æœƒåœ¨ç·¨è¯éšŽæ®µä½¿ç”¨ autoprefixer 進(jìn)行樣å¼çš„自動補(bÇ”)全。
而å°ç¨‹åºé–‹ç™¼(fÄ)者工具也æä¾›äº†æ¨£å¼è£œ(bÇ”)全的能力:詳情-本地è¨(shè)ç½®-å¯ä»¥å‹¾é¸ã€Œä¸Šå‚³ä»£ç¢¼æ™‚(shÃ)樣å¼è‡ªå‹•補(bÇ”)å…¨ã€
這個(gè)補(bÇ”)å…¨å’Œæˆ‘å€‘åœ¨ç·¨è¯æ™‚(shÃ)åšçš„æœ‰ä»€ä¹ˆä¸åŒå—Žï¼Ÿ
é—œ(guÄn)éµåœ¨äºŽå®ƒå¯¦(shÃ)ç¾(xià n)的時(shÃ)機(jÄ«):如果是本地模æ¿ä¸Šå‚³å‰ï¼Œé‚£ä¹ˆæ‡‰(yÄ«ng)該和我們編è¯çš„補(bÇ”)全效果一樣;如果是在上傳模æ¿åŽï¼Œä¹Ÿè¨±å¯ä»¥å€Ÿæ¤æ¸›æŽ‰è£œ(bÇ”)全內(nèi)容所å 的尺寸。
çµ(jié)åˆå°ç¨‹åºä»£ç¢¼åŒ…傳éžéŽç¨‹å’Œæ¨£å¼è£œ(bÇ”)全時(shÃ)機(jÄ«),大概有以下 3 種情æ³ï¼š
階段一補(bǔ)全:
階段二:
或者是階段三:
為了驗(yà n)è‰çŒœæƒ³ï¼Œä¾†åšä¸€å€‹(gè)實(shÃ)é©—(yà n)å§ï¼Œæ¯”較「 é …(xià ng)目編è¯ä¸è£œ(bÇ”)全樣å¼+開發(fÄ)者工具è¨(shè)置樣å¼è£œ(bÇ”)全〠vs「 é …(xià ng)目編è¯è£œ(bÇ”)全樣å¼+開發(fÄ)者工具ä¸è¨(shè)置樣å¼è£œ(bÇ”)å…¨ã€ï¼Œæ¨¡æ¿é«”ç©çµ±(tÇ’ng)計(jì)如下:
å¯è¦‹å‰è€…比åŽè€…少了 58kb,這說明,開發(fÄ)者工具æä¾›çš„æ¨£å¼è£œ(bÇ”)免䏿˜¯åœ¨éšŽæ®µä¸€åšçš„,ä¸ç„¶æ¨¡æ¿é«”ç©æ‡‰(yÄ«ng)該和我們自己åšçš„ç·¨è¯è£œ(bÇ”)全基本一致。
那么,就å¯ä»¥æ„‰å¿«çš„去掉編è¯è£œ(bÇ”)全,使用å°ç¨‹åºé–‹ç™¼(fÄ)者工具æä¾›çš„能力了。
ä¸éŽé€™æ¨£æ”¹å‹•會出ç¾(xià n)一個(gè)å°å•題,開發(fÄ)者工具內(nèi)çš„æ¨£å¼æ˜¯æœªç¶“(jÄ«ng)補(bÇ”)全處ç†çš„,個(gè)åˆ¥æ¨£å¼æœƒæœ‰é»ž(diÇŽn)å•題,測試就發(fÄ)ç¾(xià n) mask-border-source 無效,而相應(yÄ«ng)真機(jÄ«)å› ?yà n)æ©çƒŸç ‘訕邮窖a(bÇ”)全沒有å•題。為了ä¸å‡ºç¾(xià n)é (yù)覽誤會,建è°çµ¦é€™ç¨®å°šæœªæ”¯æŒçš„æ¨£å¼æ‰‹å‹•寫上 -webkit- å‰ç¶´ï¼Œä¿è‰é–‹ç™¼(fÄ)和真機(jÄ«)表ç¾(xià n)一致。
三ã€å°å¿ƒ Sass!
sass/less ç‰å·¥å…·ä½¿å¾— css çš„ç·¨å¯«è®Šå¾—æ›´åŠ æµæš¢ï¼Œå‡½æ•¸(shù)和變é‡çš„引入也讓 css 有了一點(diÇŽn)工程化的æ„å‘³ã€‚ä½†æ˜¯ä½ æœ‰æ²’æœ‰è§€å¯ŸéŽ sass 的編è¯å¯¦(shÃ)ç¾(xià n)呢?
// a.scss,作為被引用方
.banner { // 樣å¼å®šç¾©
color: red;
}
$COLOR = red // 變é‡å®šç¾©ï¼ˆå‡½æ•¸(shù)定義類似)
// b.scss,作為使用方
@import 'a.scss';
.banner_wrapper {
background: white;
color:$COLOR;
}
é—œ(guÄn)注 b.sass 的編è¯åŽï¼š
// a.scss的引用消失了,內(nèi)容被整åˆåˆ°æ–‡ä»¶å…§(nèi)
.banner { // a.scsså…§(nèi)的樣å¼å®šç¾©æœƒè¢«æ‹·è²é€²(jìn)來
color: red;
}
.banner_wrapper {
background: white;
color:red; //變é‡å®šç¾©æœƒè¢«æŒ‰å€¼æ›¿æ›
}
這里出ç¾(xià n)çš„å•題是:我們是å¦éœ€è¦ .banner
被拷è²é€²(jìn)來呢
為了é¿å…多引入ä¸éœ€è¦çš„æ¨£å¼å®šç¾©ï¼Œæœ‰ä»¥ä¸‹å¹¾å€‹(gè)æ–¹å‘:
按功能拆分 a.scss å…§(nèi)的樣å¼å®šç¾©ï¼ŒæŒ‰éœ€å¼•入。
使用 @include 語法,將 banner 的定義變æˆä¸€å€‹(gè)變é‡ï¼ŒæŒ‰éœ€å¼•入。
而在å°ç¨‹åºå ´æ™¯ï¼Œwxss èªžæ³•æ”¯æŒ @import,實(shÃ)ç¾(xià n)了極弱版的模塊化,使得我們å¯ä»¥å†åР䏀個(gè)角度解決上é¢çš„å•題:
ç¹žéŽ sass ç·¨è¯ï¼Œä½¿ç”¨å°ç¨‹åºçš„ @import 語法,引入需è¦çš„æ¨£å¼å®šç¾©ã€‚(關(guÄn)于如何繞開 sass ç·¨è¯ï¼Œå¯ä»¥è€ƒæ…®ä½¿ç”¨æ³¨é‡‹ç‰‡æ®µï¼Œæˆ–者白å單篩é¸è˜åˆ¥ï¼‰
å››ã€å¤šç«¯å ´æ™¯çš„冗余代碼移除
京喜首é é …(xià ng)目使用 Taro 開發(fÄ),需è¦é©é… H5/微信å°ç¨‹åº/QQ å°ç¨‹åºç‰å¤šç«¯å ´æ™¯ï¼Œåˆ©ç”¨ Taro æä¾›çš„ç’°(huán)境變é‡èƒ½åŠ›ï¼Œå¯ä»¥åœ¨æ–¹æ³•å…§(nèi)部實(shÃ)ç¾(xià n)多端差異處ç†ï¼Œæ¯”如下é¢é€™æ®µï¼š
init(){
if(process.env.TARO_ENV === 'weapp'{
// 微信å°ç¨‹åºé‚輯
this.initWeapp()
}else if(process.env.TARO_ENV === 'h5'){
// H5é é¢é‚輯
this.initH5()
}
}
initWeapp(){...}
initH5(){...}
å°ç¨‹åºç«¯æ‰“包åŽä»£ç¢¼ï¼š
init(){
this.initWeapp()
}
initWeapp(){...}
initH5(){...}
但是,環(huán)å¢ƒè®Šé‡æ–¹å¼?jÄ«ng)]è¾¦æ³•è™•ç† initH5 這種方法定義,導(dÇŽo)致也被打包進(jìn)來了。
å› æ¤ï¼Œæˆ‘å€‘éœ€è¦æ›´å¼·(qiáng)大的差異打包:京喜首é 利用內(nèi)部的 wxa-cli 工具æä¾›çš„æ¢ä»¶ç·¨è¯èƒ½åŠ›ï¼Œé€šéŽæ³¨é‡‹æ®µè½æ¨™(biÄo)記,圈注出多端內(nèi)容,實(shÃ)ç¾(xià n)了代碼片段層é¢çš„差異打包,細(xì)節(jié)如下:
init(){
if(process.env.TARO_ENV === 'weapp'{
// 微信å°ç¨‹åºé‚輯
this.initWeapp()
}else if(process.env.TARO_ENV === 'h5'){
// H5é é¢é‚輯
this.initH5()
}
}
initWeapp(){...}
/* wxa if:type=='h5' */ 標(biÄo)記h5端代碼開始ä½ç½®
initH5(){...}
/* /wxa */ 標(biÄo)記注釋çµ(jié)æŸä½ç½®
打包åŽä»£ç¢¼ï¼š
init(){ // weapp內(nèi)
this.initWeapp()
}
initWeapp(){...}
initH5 消失了,代碼更瘦了
äº”ã€æ•´ç† log
為了調(dià o)è©¦æ–¹ä¾¿ï¼Œä½ çš„é …(xià ng)目內(nèi)有沒有打很長的 log,類似于這種:
console.log('==============xx接å£ç•°å¸¸============')
ç¶“(jÄ«ng)éŽæ¸¬è©¦ï¼Œé¦–é 代碼文件內(nèi)有 5KB 的內(nèi)容是 log 語å¥ï¼Œå¯ä»¥è©¦è‘—優(yÅu)化一下:
åŠæ™‚(shÃ)移除開發(fÄ)調(dià o)試用 log
ä¿¡æ¯é¡ž log 約定長度更çŸçš„æ ¼å¼
å…ã€è‰¯å¥½çš„編碼ç–ç•¥
æœ‰æ²’æœ‰åŒæ¨£çš„é‚輯需求,å¯ä»¥ç”¨æ›´çŸæ›´å„ª(yÅu)雅的寫法來實(shÃ)ç¾(xià n)呢?
é—œ(guÄn)äºŽä»£ç¢¼åˆ†æžæ˜¯å€‹(gè)很復(fù)雜的話題,暫時(shÃ)列一個(gè)çµ(jié)è«–ç›¸å°æ˜Žç¢ºçš„寫法å§
æ ¼å¼åŒ–數(shù)據(jù)時(shÃ)數(shù)據(jù)çš„å˜å–å’Œä¸é–“變é‡å•題
function format(list){
let result = []
list.forEach(item => {
const {
a,
b,
c: f,
d,
e,
} = item
result.push({
a,
b,
f,
d,
e,
})
})
return result
å¯ä»¥åˆ©ç”¨ lodash çš„ pick 方法改寫æˆï¼š
import { pick } from 'lodash/pick'
function format(list){
return list.map(item=>({
...pick(item,'a','b','d','e'),
f:item.c
}))
ä¸ƒã€æ¨£å¼å‘½åç·¨è¯å„ª(yÅu)化
京喜首é é …(xià ng)目由于 H5 端混æè€é …(xià ng)目,為了é¿å…é¡žåæ²–çªï¼Œé‡‡ç”¨äº†å½¢å¦‚ block-name__element--modifier
çš„ bem 命åè¦(guÄ«)則。在開發(fÄ)ä¸é€²(jìn)一æ¥ç™¼(fÄ)ç¾(xià n),一些類似 navbar-content__item
的常見命åå¶çˆ¾æ’žè»Šï¼Œç‚ºäº†é¿å…æ²–çªï¼Œé¡žå就越寫越長,而å°ç¨‹åºä»£ç¢¼åŒ…的尺寸影響也在悄悄增大。
ç‚ºäº†è§£æ±ºå‘½åæ²–çªçš„å•題,將類å hash 化是個(gè)好辦法,css-modules 就是個(gè)æˆç†Ÿçš„æ’ä»¶ï¼Œå¯ä»¥é€šéŽé…ç½®è¦(guÄ«)å‰‡ï¼Œå°æ¨£å¼åç·¨è¯å‡ºã€Œæ–‡ä»¶å+å…§(nèi)容相關(guÄn)ã€çš„ç¨(dú)特化 hash。
ä½†æ˜¯ç ”ç©¶ä¸‹å®ƒçš„å¯¦(shÃ)ç¾(xià n),會發(fÄ)ç¾(xià n)å°ä»£ç¢¼å°ºå¯¸çš„影響ä¸å®¹æ¨‚觀,看一個(gè)ç·¨è¯åŽä¾‹å:
import style from './index.module.map.scss.js' //jsæ–‡ä»¶ï¼Œå¢žåŠ ä¸€å¥jsMap的引入
<view className={style.banner}></view> // wxml文件,æ¯è™•類å都比原類åå¢žåŠ äº†`style.`的引用
.hash { xx } // wxss文件, 類å被hash化,減少的具體尺寸為:原類å-hash
module.exports = { banner : hash } // 新增了一個(gè)map文件,實(shÃ)ç¾(xià n)原å與hashåçš„æ˜ å°„ï¼Œå¢žåŠ çš„å…·é«”å°ºå¯¸ç‚º:原類å+hash
計(jì)算整體內(nèi)容變化:
js å…§(nèi)新增引入 map 語å¥ï¼šå¢žåР䏀å¥ä»£ç¢¼
wxml å…§(nèi):原為 n 個(gè)類å,ç¾(xià n)為 n 個(gè)「style.+原類åã€ï¼Œå¢žé‡ç‚º n 個(gè)
style.
map 文件 與 wxss 文件åˆè¨ˆ(jì):map å…§(nèi)有 n 個(gè)原類å與 hash æ˜ å°„ï¼Œ wxss ç¾(xià n)為 n 個(gè) hash , 減去原來的 n 個(gè)原類å ,åˆè¨ˆ(jì)增é‡ç‚º 2n 個(gè) hash
å¯è¦‹å¼•å…¥ css-modules 會導(dÇŽo)è‡´æ•´é«”ä»£ç¢¼å°ºå¯¸å¢žåŠ ã€‚
æœƒä¸æœƒè¦ºå¾—這個(gè)新增的 map 文件的作用特別熟悉呢?
在我們壓縮 js 文件時(shÃ),會有一個(gè) sourceMap 文件,它ä¿ç•™äº†åŽŸå§‹å‘½å和代碼ä½ç½®ï¼Œå¯ä»¥æ–¹ä¾¿å®šä½å’Œ debug。
css-modules 實(shÃ)ç¾(xià n)çš„ map 文件,在我看來作用和 sourceMap 的命å索引差ä¸å¤šï¼Œå°äºŽä»£ç¢¼é‚è¼¯ä¾†èªªï¼Œé™¤äº†ä¿æŒåŽŸé¡žå的引用信æ¯ï¼Œå®ƒå¥½åƒä¹Ÿæ²’ä»€ä¹ˆç”¨äº†ï¼Œåœ¨å°ºå¯¸æ•æ„Ÿå ´æ™¯ï¼Œå°±å¯ä»¥è€ƒæ…®åŽ»æŽ‰ map 文件,還是上文的示例,如果å¯ä»¥å¯¦(shÃ)ç¾(xià n)æˆé€™æ¨£å°±å¥½äº†ï¼š
// import style from './index.module.map.scss.js' jsæ–‡ä»¶å–æ¶ˆmap的引入
// wxml文件
<view className="hash"></view> // å°style.banner進(jìn)行求值并替æ›
// wxss文件
.hash { xx } // 這里ä¸è®Š
module.exports = { banner : hash } // 刪掉ä¸è¦
ç¶²(wÇŽng)上é尋沒有相關(guÄn)的處ç†ï¼Œåªèƒ½è‡ªå·±é€ 輪åé–‹æžäº†ã€‚
由于當(dÄng)å‰ä¸»è¦ç›®çš„æ˜¯å°å°ç¨‹åºä»£ç¢¼ç˜¦èº«ï¼ŒH5 端文件處ç†å’Œå°ç¨‹åºä¹Ÿæœ‰ä¸€äº›å·®ç•°ï¼Œæ‰€ä»¥æš«æ™‚(shÃ)åªå°å°ç¨‹åºå ´æ™¯é€ 了æ’件,å–å weapp-css-modules ,github 地å€åœ¨é€™é‡Œï¼šhttps://github.com/o2team/weapp-css-modules
大概æ€è·¯æ˜¯ï¼š
完æˆå°ç¨‹åºçš„ css-modules 實(shÃ)ç¾(xià n)
在æ¤åŸºç¤Ž(chÇ”)上進(jìn)行 map 移除的相關(guÄn)簡化é‚輯
進(jìn)一æ¥çš„,考慮到å°ç¨‹åºçµ„ä»¶å…§(nèi)默èª(rèn)樣å¼éš”é›¢çš„ç‰¹æ€§ï¼Œå° hash 化的命å冿¬¡ç¸®çŸï¼Œè®Šæˆå–®å—æ¯ç·¨æŽ’。
如果是åªé–‹ç™¼(fÄ)å°ç¨‹åºç«¯ï¼Œå¯ä»¥å€Ÿæ¤å¯¦(shÃ)ç¾(xià n)å°ç¨‹åºæ¨£å¼å‘½å相關(guÄn)的代碼瘦身,而å°äºŽ Taro 開發(fÄ)çš„å¤šç«¯å ´æ™¯ï¼Œé‚„å¯ä»¥åŒæ™‚(shÃ)解決 h5 ç«¯çš„å‘½åæ²–çªå•題。
還是上é¢çš„例åï¼Œä¸‹é¢æ˜¯ weapp-css-modules ç·¨è¯åŽæ•ˆæžœï¼š
// js文件
let style = {} // ä¸å¼•用mapï¼ŒåŠ å…¥å°ä¸è¦(guÄ«)范引入style的兼容
// wxml文件
<view className="a"></view> // å°style.banner進(jìn)行求值并替æ›ï¼ŒåР入單嗿¯ç·¨æŽ’
// wxss文件
.a { xx } // å› ?yà n)樾〕绦蚪M件樣å¼éš”離,所以å¯ä»¥æœ€çŸåŒ–類å
module.exports = { banner : hash } // 刪掉ä¸è¦
京喜首é é …(xià ng)ç›®é€šéŽæ”¹é€ 組件采用 css-modules å¯«æ³•ï¼ŒåŠ ä¸Š weapp-css-modules ç·¨è¯ï¼Œä»£ç¢¼ç›¸å°å°ºå¯¸æ¸›å°‘了 10%,還是很有效果的,感興趣的åŒå¸(xué)å¯ä»¥è©¦ç”¨ä¸€ä¸‹ã€‚
總çµ(jié)
é—œ(guÄn)于代碼瘦身,想æä¸€ä¸‹ä¿¡æ¯å¸(xué)ä¸ç†µçš„æ¦‚å¿µï¼šç†µåæ˜ ä¿¡æ¯çš„ç„¡åºç¨‹åº¦ï¼Œä¸€æ®µä¿¡æ¯ç„¡åºç¨‹åº¦è¶Šä½Žï¼Œå®ƒçš„熵值越低,å¯è¢«å£“縮的空間越大;無åºç¨‹åº¦è¶Šé«˜ï¼Œç†µå€¼è¶Šé«˜ï¼Œå¯è¢«å£“縮的空間越å°ã€‚而數(shù)據(jù)壓縮或者是代碼瘦身的éŽç¨‹ï¼Œå°±æ˜¯é€šéŽå„ª(yÅu)化信æ¯å˜å„²æ–¹å¼ä»¥é€¼è¿‘它真實(shÃ)的熵值。
從這個(gè)角度來說:
「å—體和é¡è‰²çš„全局共用ã€å’Œã€Œæ¨£å¼è£œ(bÇ”)å…¨åŠŸèƒ½çš„ä½¿ç”¨ã€æ˜¯å€Ÿç”¨å°ç¨‹åºæä¾›çš„能力,信æ¯é‡æ²’變;
「å°å¿ƒ Sassã€ã€ã€Œå¤šç«¯å ´æ™¯çš„å†—ä½™ä»£ç¢¼ç§»é™¤ã€æ˜¯æ¸›å°‘ä¸ç”¨çš„ä¿¡æ¯ï¼›
ã€Œæ•´ç† logã€å’Œã€Œæ¨£å¼å‘½åç·¨è¯å„ª(yÅu)åŒ–ã€æ˜¯å‡ç·´æœ‰æ•ˆä¿¡æ¯ï¼›
看起來最ä¸å¥½æ¸é¡žçš„æ˜¯ã€Œè‰¯å¥½çš„編碼ç–ç•¥ã€ï¼Œå®ƒæ˜¯åœ¨ç·¨ç¢¼éšŽæ®µå°ä¿¡æ¯çš„æ¢³ç†å’Œæ•´åˆï¼Œä¹Ÿç®—å‡ç·´æœ‰æ•ˆä¿¡æ¯å§ã€‚
以上就是京喜首é é …(xià ng)ç›®é€™æ¬¡ä»£ç¢¼ç˜¦èº«çš„ä¸»è¦æ–¹å¼äº†ï¼Œé™¤æ¤ä¹‹å¤–的刪除ä¸ç”¨æ–‡ä»¶ã€æ•´åˆå…¬å…±æ–‡ä»¶é€™äº›é«”力活,我就ä¸å†å•°å—¦äº†ã€‚通éŽä»¥ä¸Šæ–¹å¼ï¼Œäº¬å–œé¦–é 代碼在原本優(yÅu)化良好的基礎(chÇ”)上,實(shÃ)ç¾(xià n)äº†å†æ¬¡æ¸›é‡ 30%的目標(biÄo),希望能給å°ç¨‹åºé–‹ç™¼(fÄ)者們帶來有價(jià )值的信æ¯å’Œæ€è€ƒã€‚
åƒè€ƒè³‡æ–™
[1] CSS Modules: https://github.com/css-modules/css-modules
[2] Tree-Cli: https://github.com/MrRaindrop/tree-cli
[3] å°ç¨‹åºå·¥ç¨‹åŒ–探索: https://mp.weixin.qq.com/s/_NSJTQ-4-8gTnwTVK-tn0A
[4] 微信å°ç¨‹åº é™åˆ¶ 2M 的瘦身技巧與方法詳解: https://blog.csdn.net/wlanye/article/details/73457700
最åŽ
å¦‚æžœä½ è¦ºå¾—é€™ç¯‡å…§(nèi)容å°ä½ 挺有啟發(fÄ)ï¼Œæˆ‘æƒ³é‚€è«‹ä½ å¹«æˆ‘ä¸‰å€‹(gè)å°å¿™ï¼š
點(diÇŽn)個(gè)「 在看 ã€ï¼Œè®“更多的人也能看到這篇內(nèi)容(喜æ¡ä¸é»ž(diÇŽn)åœ¨çœ‹ï¼Œéƒ½æ˜¯è€æµæ°“ -_-)
æ¡è¿ŽåŠ æˆ‘å¾®ä¿¡ã€Œhuab119ã€æ‹‰ä½ 進(jìn)技術(shù)群,長期交æµå¸(xué)ç¿’(xÃ)...
é—œ(guÄn)注公眾號「 å‰ç«¯å‹¸é€€å¸« ã€ï¼ŒæŒçºŒ(xù)ç‚ºä½ æŽ¨é€ç²¾é¸å¥½æ–‡ï¼Œä¹Ÿå¯ä»¥åŠ æˆ‘ç‚ºå¥½å‹ï¼Œéš¨æ™‚(shÃ)èŠé¨·ã€‚
相關(guÄn)案例查看更多
相關(guÄn)閱讀
- ç´…æ²³å°ç¨‹åºé–‹ç™¼(fÄ)
- ç¶²(wÇŽng)站建è¨(shè)快速優(yÅu)化
- ç¶²(wÇŽng)站優(yÅu)化
- 云å—ç¶²(wÇŽng)站建è¨(shè)é èœå…¬å¸
- 云å—ç¶²(wÇŽng)站建è¨(shè)è²»(fèi)用
- 云å—ç¶²(wÇŽng)站建è¨(shè)專家
- å°ç¨‹åºè¨(shè)計(jì)
- 昆明å°ç¨‹åºä»£å»º
- webå‰ç«¯
- 出入å°ç¨‹åº
- 云å—ç¶²(wÇŽng)站建è¨(shè)æœå‹™(wù)å…¬å¸
- å°ç¨‹åºé–‹ç™¼(fÄ)è²»(fèi)用
- æ±½è»Šå ±(bà o)廢管ç†
- 云å—çœå»ºè¨(shè)廳官方網(wÇŽng)ç«™
- 云å—åšç™¾åº¦å°ç¨‹åºçš„å…¬å¸
- 云å—å°ç¨‹åºé–‹ç™¼(fÄ)å…¬å¸æŽ¨è–¦
- ç¶²(wÇŽng)站建è¨(shè)è²»(fèi)用
- 大ç†ç¶²(wÇŽng)站建è¨(shè)å…¬å¸
- 云å—ç¶²(wÇŽng)站建è¨(shè)å°ˆæ¥(yè)å“牌
- äº‘å—æ—…游網(wÇŽng)站建è¨(shè)
- ç¶²(wÇŽng)站建è¨(shè)特性
- 制作一個(gè)å°ç¨‹åº
- 智慧農(nóng)貿(mà o)å¸‚å ´
- 全國å‰ååå°ç¨‹åºé–‹ç™¼(fÄ)å…¬å¸
- 網(wǎng)站收錄
- 云å—ç¶²(wÇŽng)絡(luò)å…¬å¸
- 昆明å°ç¨‹åºå®šåˆ¶é–‹ç™¼(fÄ)
- ç¶²(wÇŽng)絡(luò)公叿ޒå
- æœç´¢æŽ’å
- 汽車回收系統(tǒng)