成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端小記4——高性能mobile web開發(fā)

番茄西紅柿 / 1647人閱讀

摘要:高性能動(dòng)畫與端場(chǎng)景需要相比,移動(dòng)端需要考慮的因素也相對(duì)復(fù)雜,重點(diǎn)考慮流量功耗與流暢度。而在移動(dòng)端,我們選擇性能更優(yōu)瀏覽器原生實(shí)現(xiàn)方案動(dòng)畫。然而,動(dòng)畫在移動(dòng)多終端設(shè)備場(chǎng)景下,相比會(huì)面對(duì)更多的性能問題,主要體現(xiàn)在動(dòng)畫的卡頓與閃爍。

1.高性能CSS3動(dòng)畫

與PC端場(chǎng)景需要相比,移動(dòng)web端需要考慮的因素也相對(duì)復(fù)雜,重點(diǎn)考慮:流量、功耗與流暢度。在pc端上考慮更多的是流暢度,而mobile web中需要考慮網(wǎng)絡(luò)流量的使用和耗電情況。

關(guān)于流暢度,在前端動(dòng)畫中主要有兩種:JS動(dòng)畫與CSS3動(dòng)畫。

 JS動(dòng)畫是通過JS動(dòng)態(tài)改寫樣式實(shí)現(xiàn)動(dòng)畫能力的一種方案,在PC端兼容低端瀏覽器中不失為一種推薦方案。 而在移動(dòng)端,我們選擇性能更優(yōu)瀏覽器原生實(shí)現(xiàn)方案:CSS3動(dòng)畫。然而,CSS3動(dòng)畫在移動(dòng)多終端設(shè)備場(chǎng)景下,相比PC會(huì)面對(duì)更多的性能問題,主要體現(xiàn)在動(dòng)畫的卡頓與閃爍。

提升CSS3動(dòng)畫:

(1)盡量利用硬件能力,如使用3D變形來開啟GPU加速

-webkit-transform: translate3d(0,0,0);

-moz-transform: translate3d(0,0,0);

-ms-transform: translate3d(0,0,0);

transform: translate3d(0,0,0);

(2)動(dòng)畫過程閃爍

通常發(fā)生在動(dòng)畫開始,嘗試使用hack

-webkit-backface-visibility: hidden;

-moz-backface-visibility:hidden;

-ms-backface-visibility:hidden;

backface-visibility:hidden;

 

-webkit-perspective: 1000;

-moz-perspective: 1000;

-ms-perspective: 1000;

perspective: 1000;

 

(3)translate3d

一個(gè)元素通過translate3d右移500px的動(dòng)畫流暢度高于使用left

#ball-2 {
  transition: left .5s ease;
  left: 0;
}
#ball-2.slidein {
  left: 500px;
}

#ball-1 {
  transition: -webkit-transform .5s ease;
  -webkit-transform: translate3d(0, 0, 0);
}
#ball-1.slidein {
  -webkit-transform: translate3d(500px, 0, 0);
}

注:3D變形會(huì)消耗更多的內(nèi)存與功耗,應(yīng)確實(shí)有性能問題時(shí)才去使用它,兼在權(quán)衡。

(4)盡量少用box-shadows與gradients

box-shadowsgradients往往都是頁面的性能殺手,尤其是在一個(gè)元素同時(shí)都使用了它們,所以擁抱扁平化設(shè)計(jì)吧。

(5)盡量讓動(dòng)畫不在文檔流中,以減少重排

position: fixed;

position:absolute;

(6)優(yōu)化DOM layout性能

實(shí)例代碼:

// 觸發(fā)兩次 layout
var newWidth = aDiv.offsetWidth + 10;   // Read
aDiv.style.width = newWidth + px;     // Write
var newHeight = aDiv.offsetHeight + 10; // Read
aDiv.style.height = newHeight + px;   // Write

// 只觸發(fā)一次 layout
var newWidth = aDiv.offsetWidth + 10;   // Read
var newHeight = aDiv.offsetHeight + 10; // Read
aDiv.style.width = newWidth + px;     // Write
aDiv.style.height = newHeight + px;   // Write

從結(jié)果分析應(yīng)與執(zhí)行隊(duì)列有關(guān),這是瀏覽器的優(yōu)化策略。所有可觸發(fā)layout的操作都會(huì)被暫時(shí)放入 layout-queue 中,等到必須更新的時(shí)候,再計(jì)算整個(gè)隊(duì)列中所有操作影響的結(jié)果,如此就可只進(jìn)行一次的layout,從而提升性能。

 

2.CSS動(dòng)畫屬性性能

CSS動(dòng)畫屬性會(huì)觸發(fā)整個(gè)頁面的重排relayout、重繪repaint、重組recomposite

Paint通常是其中最花費(fèi)性能的,盡可能避免使用觸發(fā)paint的CSS動(dòng)畫屬性,這也是為什么我們推薦在CSS動(dòng)畫中使用webkit-transform: translateX(3em)的方案代替使用left: 3em,因?yàn)?code>left會(huì)額外觸發(fā)layout與paint,而webkit-transform只觸發(fā)整個(gè)頁面composite

 

推薦一個(gè)超小手勢(shì)庫AlloyFinger原理:https://github.com/AlloyTeam/AlloyCrop/blob/master/asset/alloyfinger.md

裁剪解決方案:https://github.com/AlloyTeam/AlloyCrop

 

小程序、小游戲以及web通用canvas渲染引擎:https://github.com/dntzhang/cax

 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/1998.html

相關(guān)文章

  • FEDay 參會(huì)小記

    摘要:介紹微信風(fēng)格的,與客戶端體驗(yàn)一致,這個(gè)自己去微信上看吧,略。微信調(diào)試一件套,網(wǎng)頁授權(quán)模擬集成代理遠(yuǎn)程調(diào)試。這些在微信開發(fā)者中心有介紹,略。年微信開發(fā)經(jīng)驗(yàn)的人,終于又成為了零年開發(fā)經(jīng)驗(yàn)的人,重新走上了踩坑之路。 showImg(https://segmentfault.com/img/bVtEd1);活動(dòng)地址:http://fequan.com/2016/ 注意:英文不好,小記也帶有自己...

    xcc3641 評(píng)論0 收藏0
  • bilibili直播: Vue.js Podcast(小記錄)~~~

    摘要:我聽不太懂了內(nèi)存管理日后需要解決不應(yīng)該合并小的請(qǐng)求升級(jí)成本可能會(huì)有多頁面構(gòu)建工程歡迎社區(qū)人士來搞尤大說盡量少用會(huì)有副作用值得借鑒的啊勾股建議全局現(xiàn)階段停留在底層,不能完全解決,還是需要框架 主持人:陰明 virtual dom 然后balabala(走神了- -) 尤小右 服務(wù)端渲染:流式渲染v-model用在自定義組件業(yè)務(wù)邏輯的組建需要可服用的 需要注意父子組件的解耦(不推薦雙向綁定...

    浠ラ箍 評(píng)論0 收藏0
  • 【翻譯】Web渲染概述

    摘要:由我所在的團(tuán)隊(duì)共同翻譯完成,并發(fā)布在前端技術(shù)公眾號(hào)方凳雅集上,轉(zhuǎn)載于此。在移動(dòng)端,客戶端渲染很難獲得并保持一個(gè)較快的渲染速度。使用技術(shù)進(jìn)行服務(wù)端渲染的主要問題在于它會(huì)對(duì)可交互時(shí)間有明顯的負(fù)面影響,盡管它縮短了首次繪制時(shí)間 本文簡單介紹了web應(yīng)用各種渲染方案,其中包括客戶端渲染、服務(wù)器端渲染等各種渲染方案。文章翻譯自:https://developers.google.com...。由...

    RobinQu 評(píng)論0 收藏0
  • 【翻譯】Web渲染概述

    摘要:由我所在的團(tuán)隊(duì)共同翻譯完成,并發(fā)布在前端技術(shù)公眾號(hào)方凳雅集上,轉(zhuǎn)載于此。在移動(dòng)端,客戶端渲染很難獲得并保持一個(gè)較快的渲染速度。使用技術(shù)進(jìn)行服務(wù)端渲染的主要問題在于它會(huì)對(duì)可交互時(shí)間有明顯的負(fù)面影響,盡管它縮短了首次繪制時(shí)間 本文簡單介紹了web應(yīng)用各種渲染方案,其中包括客戶端渲染、服務(wù)器端渲染等各種渲染方案。文章翻譯自:https://developers.google.com...。由...

    NervosNetwork 評(píng)論0 收藏0
  • nodejs之express小記

    摘要:如果說用一句話來概括那就是它開啟了服務(wù)器端語言。系列的文章并不會(huì)從一開始長篇概論的講的歷史,安裝,以及其他很瑣碎的事情。只會(huì)專門介紹關(guān)于或者準(zhǔn)確來講是關(guān)于的敏捷開發(fā)。性能不對(duì)已有的特性進(jìn)行二次抽象,我們只是在它之上擴(kuò)展了應(yīng)用所需的基本功能。 如果說用一句話來概括Node那就是:它開啟了JavaScript服務(wù)器端語言。 Node系列的文章并不會(huì)從一開始長篇概論的講Node的歷史,安裝,...

    awokezhou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<