移動端H5前端性能優(yōu)化

移動端+HTML5拒炎,這個組合對前端工程師來說是個不小的挑戰(zhàn):如何讓開發(fā)的頁面能有更好的體驗?這就是我們今天討論的話題:移動端HTML5頁面前端性能優(yōu)化。

如何優(yōu)化HTML5在移動設(shè)置上的性能表現(xiàn),首先需要明確以下幾個原則:

1章办、PC優(yōu)化手段在Mobile端同樣適用。

2滨彻、在Mobile側(cè)我們提出三秒種渲染完成首屏指標藕届。

3、基于第二點亭饵,首屏加載3秒完成或使用Loading休偶。

4、基于聯(lián)通3G網(wǎng)絡(luò)平均338KB/s(2.71Mb/s)冬骚,所以首屏資源不應(yīng)超過1014KB椅贱。

5、Mobile端因手機配置原因只冻,除加載外渲染速度也是優(yōu)化重點庇麦。

6、基于第五點喜德,要合理處理代碼減少渲染損耗山橄。

7、基于第二舍悯、第五點航棱,所有影響首屏加載和渲染的代碼應(yīng)在處理邏輯中后置睡雇。

8、加載完成后用戶交互使用時也需注意性能饮醇。

接下來先看一張神圖:

h5.jpeg

之所以說是神圖它抱,是因為它基本上涵蓋了所有的優(yōu)化方案!非常詳盡朴艰!在這里观蓄,我們針對其中幾個代表性方案進行探討:

加載優(yōu)化
對于移動端的網(wǎng)頁來說,加載過程是最為耗時的過程祠墅,可能會占到總耗時的80%時間侮穿,因此是優(yōu)化的重點,當然毁嗦,手機站的其他前端要素優(yōu)化也是不能忽略的亲茅。

1、減少HTTP請求

因為手機瀏覽器同時響應(yīng)請求為4個請求(Android支持4個狗准,iOS 5后可支持6個)克锣,所以要盡量減少頁面的請求數(shù),首次加載同時請求數(shù)不能超過4個腔长,建議優(yōu)化要點為以下2點:

1娶耍、合并CSS、Java

2饼酿、合并小圖片,使用雪碧圖

2胚膊、緩存

使用緩存可以減少向服務(wù)器的請求數(shù)故俐,節(jié)省加載時間,所以所有靜態(tài)資源都要在服務(wù)器端設(shè)置緩存紊婉,并且盡量使用長Cache(長Cache資源的更新可使用時間戳)药版。

1、緩存一切可緩存的資源

2喻犁、使用長Cache(使用時間戳更新Cache)

3槽片、使用外聯(lián)式引用CSS、Java

3肢础、壓縮HTML还栓、CSS、Java

減少資源大小可以加快網(wǎng)頁顯示速度传轰,所以要對HTML剩盒、CSS、Java等進行代碼壓縮慨蛙,并在服務(wù)器端設(shè)置GZip辽聊。

1纪挎、壓縮(例如,多余的空格跟匆、換行符和縮進)

2异袄、啟用GZip

4、無阻塞

寫在HTML頭部的Java(無異步)玛臂,和寫在HTML標簽中的Style會阻塞頁面的渲染烤蜕,因此CSS放在頁面頭部并使用Link方式引入,避免在HTML標簽中寫Style垢揩,Java放在頁面尾部或使用異步方式加載

5玖绿、使用首屏加載

首屏的快速顯示,可以大大提升用戶對頁面速度的感知叁巨,因此應(yīng)盡量針對首屏的快速顯示做優(yōu)化斑匪。

6、按需加載

將不影響首屏的資源和當前屏幕資源不用的資源放到用戶需要時才加載锋勺,可以大大提升重要資源的顯示速度和降低總體流量蚀瘸。

1、LazyLoad

2庶橱、滾屏加載

3贮勃、通過Media Query加載

另外,提醒大家一點:按需加載會導(dǎo)致大量重繪苏章,影響渲染性能寂嘉。

7、預(yù)加載

大型重資源頁面(如游戲)可使用增加Loading的方法枫绅,資源加載完成后再顯示頁面泉孩,但Loading時間過長,會造成用戶流失并淋。

1寓搬、可感知Loading(如進入空間游戲的Loading)

2、不可感知的Loading(如提前加載下一頁)

3县耽、對用戶行為分析句喷,可以在當前頁加載下一頁資源,提升速度兔毙。

8唾琼、壓縮圖片

圖片是最占流量的資源,因此盡量避免使用他瞒御,使用時選擇最合適的格式(實現(xiàn)需求的前提下父叙,以大小判斷),合適的大小,然后使用智圖壓縮趾唱,同時在代碼中用Srcset來按需顯示涌乳。

1、使用智圖

2甜癞、使用其它方式代替圖片(使用CSS3夕晓;使用SVG;使用IconFont)

3悠咱、使用Srcset

4蒸辆、選擇合適的圖片(webP優(yōu)于JPG;PNG8優(yōu)于GIF)

5析既、選擇合適的大泄薄(首次加載不大于1014KB;基于手機屏幕一般寬度不寬于640)

提醒大家一點:過度壓縮圖片大小影響圖片顯示效果眼坏。

9拂玻、減少Cookie,避免重定向以及異步加載第三方資源

Cookie會影響加載速度宰译,所以靜態(tài)資源域名不使用Cookie檐蚜。另外,重定向會影響加載速度沿侈,所以在服務(wù)器正確設(shè)置避免重定向闯第。還有,第三方資源不可控會影響頁面的加載和顯示缀拭,因此要異步加載第三方資源咳短。

腳本執(zhí)行優(yōu)化
腳本處理不當會阻塞頁面加載、渲染蛛淋,因此在使用時需要注意以下幾點:

1诲泌、CSS寫在頭部,Java寫在尾部或異步铣鹏。

2、避免圖片和iFrame等的空Src哀蘑,空Src會重新加載當前頁面诚卸,影響速度和效率。

3绘迁、盡量避免重設(shè)圖片大小合溺,重設(shè)圖片大小是指在頁面、CSS缀台、Java等中多次重置圖片大小棠赛,多次重設(shè)圖片大小會引發(fā)圖片的多次重繪,影響性能。

4睛约、圖片盡量避免使用DataURL鼎俘,DataURL圖片沒有使用圖片的壓縮算法文件會變大,并且要解碼后再渲染辩涝,加載慢耗時長贸伐。

CSS優(yōu)化
1、盡量避免寫在HTML標簽中寫Style屬性怔揩。

2捉邢、避免CSS表達式,CSS表達式的執(zhí)行需跳出CSS樹的渲染商膊,因此請避免CSS表達式伏伐。

3、移除空的CSS規(guī)則晕拆,空的CSS規(guī)則增加了CSS文件的大小藐翎,且影響CSS樹的執(zhí)行,所以需移除空的CSS規(guī)則潦匈。

4阱高、正確使用Display的屬性,Display屬性會影響頁面的渲染茬缩,建議各位站長要合理使用赤惊。

(1)、display:inline后不應(yīng)該再使用width凰锡、height未舟、margin、padding以及float

(2)掂为、display:inline-block后不應(yīng)該再使用float

(3)裕膀、display:block后不應(yīng)該再使用vertical-align

(4)、display:table-*后不應(yīng)該再使用margin或者float

5勇哗、不濫用Float昼扛,F(xiàn)loat在渲染時計算量比較大,盡量減少使用欲诺。

6抄谐、不濫用Web字體,Web字體需要下載扰法,解析蛹含,重繪當前頁面,盡量減少使用塞颁。

7浦箱、不聲明過多的Font-size吸耿,過多的Font-size引發(fā)CSS樹的效率。

8酷窥、值為0時不需要任何單位咽安,為了瀏覽器的兼容性和性能,值為0時不要帶單位竖幔。

9板乙、標準化各種瀏覽器前綴

(1)、無前綴應(yīng)放在最后拳氢。

(2)募逞、CSS動畫只用(-webkit- 無前綴)兩種即可。

(3)馋评、其它前綴為“-webkit- -moz- -ms-無前綴”四種(-o-Opera瀏覽器改用blink內(nèi)核放接,所以淘汰)。

10留特、避免讓選擇符看起來像正則表達式纠脾。

高級選擇器執(zhí)行耗時長且不易讀懂,避免使用蜕青。

Java執(zhí)行優(yōu)化
1苟蹈、減少重繪和回流

(1)、避免不必要的Dom操作

(2)右核、盡量改變Class而不是Style慧脱,使用classList代替className

(3)、避免使用document.write

(4)贺喝、減少drawImage

2菱鸥、緩存Dom選擇與計算,每次Dom選擇都要計算躏鱼,緩存他氮采。

3、緩存列表.length染苛,每次.length都要計算鹊漠,用一個變量保存這個值。

4茶行、盡量使用事件代理贸呢,避免批量綁定事件。

5拢军、盡量使用ID選擇器,ID選擇器是最快的怔鳖。

6茉唉、TOUCH事件優(yōu)化,使用touchstart、touchend代替click度陆,因快影響速度快艾凯,但應(yīng)注意Touch響應(yīng)過快,易引發(fā)誤操作懂傀。

渲染優(yōu)化
HTML文檔是以包含文檔編碼信息的數(shù)據(jù)流方式在網(wǎng)絡(luò)間傳輸趾诗,頁面的編碼信息一般會在HTTP響應(yīng)的頭部信息或在文檔內(nèi)的HTML標記中指明,客戶端瀏覽器只有在確定了頁面編碼后才能正確的渲染頁面蹬蚁,所以在繪制頁面或執(zhí)行任何的java代碼前恃泪,大部分的瀏覽器(ie6、ie7犀斋、ie8除外)都 會緩沖一定字節(jié)的數(shù)據(jù)來從中查找編碼信息贝乎,不同的瀏覽器當中預(yù)緩沖的字節(jié)數(shù)是不一樣的。

1叽粹、HTML使用Viewport

Viewport可以加速頁面的渲染览效,請使用以下代碼:

2、減少Dom節(jié)點

Dom節(jié)點太多影響頁面的渲染虫几,應(yīng)盡量減少Dom節(jié)點锤灿。

3、動畫優(yōu)化

(1)辆脸、盡量使用CSS3動畫但校。

(2)、合理使用requestAnimationFrame動畫代替setTimeout每强。

(3)始腾、適當使用Canvas動畫5個元素以內(nèi)使用css動畫,5個以上使用Canvas動畫(iOS8可使用webGL)空执。

4浪箭、高頻事件優(yōu)化

Touchmove、Scroll事件可導(dǎo)致多次渲染辨绊。

(1)奶栖、使用requestAnimationFrame監(jiān)聽幀變化,使得在正確的時間進行渲染门坷。

(2)宣鄙、增加響應(yīng)變化的時間間隔,減少重繪次數(shù)默蚌。

5冻晤、GPU加速

CSS中以下屬性(CSS3 transitions、CSS3 3Dtransforms绸吸、Opacity鼻弧、Canvas设江、WebGL、Video)來觸發(fā)GPU渲染攘轩,請合理使用叉存。(PS:過渡使用會引發(fā)手機過耗電增加。)

轉(zhuǎn)載來源:移動端H5前端性能優(yōu)化 - 周磊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末度帮,一起剝皮案震驚了整個濱河市歼捏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笨篷,老刑警劉巖瞳秽,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冕屯,居然都是意外死亡寂诱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門安聘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痰洒,“玉大人,你說我怎么就攤上這事浴韭∏鹩鳎” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵念颈,是天一觀的道長泉粉。 經(jīng)常有香客問我,道長榴芳,這世上最難降的妖魔是什么嗡靡? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮窟感,結(jié)果婚禮上讨彼,老公的妹妹穿的比我還像新娘。我一直安慰自己柿祈,他們只是感情好哈误,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躏嚎,像睡著了一般蜜自。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卢佣,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天重荠,我揣著相機與錄音,去河邊找鬼虚茶。 笑死戈鲁,一個胖子當著我的面吹牛尾膊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荞彼,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼待笑!你這毒婦竟也來了鸣皂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤暮蹂,失蹤者是張志新(化名)和其女友劉穎寞缝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仰泻,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡荆陆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了集侯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被啼。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棠枉,靈堂內(nèi)的尸體忽然破棺而出浓体,到底是詐尸還是另有隱情,我是刑警寧澤辈讶,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布命浴,位于F島的核電站,受9級特大地震影響贱除,放射性物質(zhì)發(fā)生泄漏生闲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一月幌、第九天 我趴在偏房一處隱蔽的房頂上張望碍讯。 院中可真熱鬧,春花似錦飞醉、人聲如沸冲茸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轴术。三九已至,卻和暖如春钦无,著一層夾襖步出監(jiān)牢的瞬間逗栽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工失暂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留彼宠,地道東北人鳄虱。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像凭峡,于是被迫代替她去往敵國和親拙已。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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

  • 移動端+HTML5摧冀,這個組合對前端工程師來說是個不小的挑戰(zhàn):如何讓開發(fā)的頁面能有更好的體驗倍踪?這就是我們今天討論的話...
    Bruce_zhuan閱讀 982評論 0 22
  • 移動端+HTML5,這個組合對前端工程師來說是個不小的挑戰(zhàn):如何讓開發(fā)的頁面能有更好的體驗索昂?這就是我們今天討論的話...
    劉佳音閱讀 378評論 0 1
  • 如何優(yōu)化HTML5在移動設(shè)置上的性能表現(xiàn)建车,首先需要明確以下幾個原則: 1、PC優(yōu)化手段在Mobile端同樣適用椒惨。 ...
    qwerer閱讀 340評論 0 0
  • 如何優(yōu)化HTML5在移動設(shè)置上的性能表現(xiàn)缤至,首先需要明確以下幾個原則: 1、PC優(yōu)化手段在Mobile端同樣適用康谆。 ...
    我的頭好大呀呀呀閱讀 346評論 0 0
  • 堅持每天的改變每天的進步秉宿,有時候真的很難戒突,每個人都渴望要變得更好,同時又希望這一切的變好不需要自己主動去尋找描睦,主動...
    涂sir閱讀 554評論 0 0