嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

前端性能優化 —— 移動端瀏覽器優化策略

2018-3-9    seo達人

如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里 

摘要: 前端性能優化是一個很寬泛的概念,本書前面的部分也多多少少提到一些前端優化方法,這也是我們一直在關注的一件重要事情。配合各種方式、手段、輔助系統,前端優化的最終目的都是提升用戶體驗,改善頁面性能,我們常常竭盡全力進行前端頁面優化,但卻忽略了這樣做的效果和意義。先不急于探究前端優化具體可以怎樣去做,先看看什么是前端性能,應該怎樣去了解和評價前端頁面的性能。


相對于桌面端瀏覽器,移動端Web瀏覽器上有一些較為明顯的特點:設備屏幕較小、新特性兼容性較好、支持一些較新的HTML5和CSS3特性、需要與Native應用交互等。但移動端瀏覽器可用的CPU計算資源和網絡資源極為有限,因此要做好移動端Web上的優化往往需要做更多的事情。


首先,在移動端Web的前端頁面渲染中,桌面瀏覽器端上的優化規則同樣適用,此外針對移動端也要做一些的優化來達到更好的效果。需要注意的是,并不是移動端的優化原則在桌面瀏覽器端就不適用,而是由于兼容性和差異性的原因,一些優化原則在移動端更具代表性。


一、網絡加載類


1.首屏數據請求提前,避免JavaScript文件加載后才請求數據


為了進一步提升頁面加載速度,可以考慮將頁面的數據請求盡可能提前,避免在JavaScript加載完成后才去請求數據。通常數據請求是頁面內容渲染中關鍵路徑最長的部分,而且不能并行,所以如果能將數據請求提前,可以極大程度上縮短頁面內容的渲染完成時間。


2.首屏加載和按需加載,非首屏內容滾屏加載,保證首屏內容最小化


由于移動端網絡速度相對較慢,網絡資源有限,因此為了盡快完成頁面內容的加載,需要保證首屏加載資源最小化,非首屏內容使用滾動的方式異步加載。一般推薦移動端頁面首屏數據展示延時最長不超過3秒。目前中國聯通3G的網絡速度為338KB/s(2.71Mb/s),所以推薦首屏所有資源大小不超過1014KB,即大約不超過1MB。


3.模塊化資源并行下載


在移動端資源加載中,盡量保證JavaScript資源并行加載,主要指的是模塊化JavaScript資源的異步加載,例如AMD的異步模塊,使用并行的加載方式能夠縮短多個文件資源的加載時間。


4.inline首屏必備的CSS和JavaScript


通常為了在HTML加載完成時能使瀏覽器中有基本的樣式,需要將頁面渲染時必備的CSS和JavaScript通過<script>或<style>內聯到頁面中,避免頁面HTML載入完成到頁面內容展示這段過程中頁面出現空白。


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>樣例</title>

    <meta name="viewport" content="width=device-width,minimum-scale=1.0, maximum-scale=1.0,user-scalable=no">

    <style>

    /* 必備的首屏CSS */

    html, body{

        margin: 0;

        padding: 0;

        background-color: #ccc;

    }

    </style>

</head>

<body>

</body>


5.meta dns prefetch設置DNS預解析


設置文件資源的DNS預解析,讓瀏覽器提前解析獲取靜態資源的主機IP,避免等到請求時才發起DNS解析請求。通常在移動端HTML中可以采用如下方式完成。


<!-- cdn域名預解析 -->

<meta http-equiv="x-dns-prefetch-control" content="on">

<link rel="dns-prefetch" >


6.資源預加載


對于移動端首屏加載后可能會被使用的資源,需要在首屏完成加載后盡快進行加載,保證在用戶需要瀏覽時已經加載完成,這時候如果再去異步請求就顯得很慢。


7.合理利用MTU策略


通常情況下,我們認為TCP網絡傳輸的最大傳輸單元(Maximum Transmission Unit,MTU)為1500B,即網絡一個RTT(Round-Trip Time,網絡請求往返時間)時間內可以傳輸的數據量最大為1500字節。因此,在前后端分離的開發模式中,盡量保證頁面的HTML內容在1KB以內,這樣整個HTML的內容請求就可以在一個RTT時間內請求完成,最大限度地提高HTML載入速度。


二、緩存類


1.合理利用瀏覽器緩存


除了上面說到的使用Cache-Control、Expires、Etag和Last-Modified來設置HTTP緩存外,在移動端還可以使用localStorage等來保存AJAX返回的數據,或者使用localStorage保存CSS或JavaScript靜態資源內容,實現移動端的離線應用,盡可能減少網絡請求,保證靜態資源內容的快速加載。


2.靜態資源離線方案


對于移動端或Hybrid應用,可以設置離線文件或離線包機制讓靜態資源請求從本地讀取,加快資源載入速度,并實現離線更新。關于這塊內容,我們會在后面的章節中重點講解。


3.嘗試使用AMP HTML


AMP HTML可以作為優化前端頁面性能的一個解決方案,使用AMP Component中的元素來代替原始的頁面元素進行直接渲染。


<!-- 不推薦 -->

<video width="400" height="300" src="http://www.domain.com/videos/myvideo.mp4" poster="path/poster.jpg">

    <div fallback>

        <p>Your browser doesn’t support HTML5 video</p>

    </div>

    <source type="video/mp4" src="foo.mp4">

    <source type="video/webm" src="foo.webm">

</video>



<!-- 推薦 -->

<amp-video width="400" height="300" src="http://www.domain.com/videos/myvideo.mp4" poster= "path/poster.jpg">

    <div fallback>

        <p>Your browser doesn’t support HTML5 video</p>

    </div>

    <source type="video/mp4" src="foo.mp4">

    <source type="video/webm" src="foo.webm">

</amp-video>


三、圖片類


1.圖片壓縮處理


在移動端,通常要保證頁面中一切用到的圖片都是經過壓縮優化處理的,而不是以原圖的形式直接使用的,因為那樣很消耗流量,而且加載時間更長。


2.使用較小的圖片,合理使用base64內嵌圖片


在頁面使用的背景圖片不多且較小的情況下,可以將圖片轉化成base64編碼嵌入到HTML頁面或CSS文件中,這樣可以減少頁面的HTTP請求數。需要注意的是,要保證圖片較小,一般圖片大小超過2KB就不推薦使用base64嵌入顯示了。


.class-name {

       background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAMAAABxsOwqAAAAYFBMVEWnxwusyQukxQudwQyZvgyhxAyfwgyxzAsUHQGOuA0aJAERGAFIXwSTugyEqgtqhghQZgUwQQIpOQKbuguVtQuKrAuCowp2kQlheghTbQZHWQU7SwVAVgQ6TgQlLwMeKwFOemyQAAAAVElEQVQI1y3JVRaAIAAF0UconXbvf5ei8HfPDIQQhBAAFE10iKig3SLRNN4SP/p+N08VC0YnfIlNWtqIkhg/TPYbCvhqdHAWRXPZSp3g3CWZvVLXC6OJA3ukv0AaAAAAAElFTkSuQmCC');

}


3.使用更高壓縮比格式的圖片


使用具有較高壓縮比格式的圖片,如webp等。在同等圖片畫質的情況下,高壓縮比格式的圖片體積更小,能夠更快完成文件傳輸,節省網絡流量。


<img src="http://cdn.domain.com/path/photo.webp" alt="webp格式圖片">


4.圖片懶加載


為了保證頁面內容的最小化,加速頁面的渲染,盡可能節省移動端網絡流量,頁面中的圖片資源推薦使用懶加載實現,在頁面滾動時動態載入圖片。


<img data-src="http://cdn.domain.com/path/photo.jpg" alt="懶加載圖片">


5.使用Media Query或srcset根據不同屏幕加載不同大小圖片


在介紹響應式的章節中我們了解到,針對不同的移動端屏幕尺寸和分辨率,輸出不同大小的圖片或背景圖能保證在用戶體驗不降低的前提下節省網絡流量,加快部分機型的圖片加載速度,這在移動端非常值得推薦。


6.使用iconfont代替圖片圖標


在頁面中盡可能使用iconfont來代替圖片圖標,這樣做的好處有以下幾個:使用iconfont體積較小,而且是矢量圖,因此縮放時不會失真;可以方便地修改圖片大小尺寸和呈現顏色。但是需要注意的是,iconfont引用不同webfont格式時的兼容性寫法,根據經驗推薦盡量按照以下順序書寫,否則不容易兼容到所有的瀏覽器上。


@font-face {

    font-family: iconfont;

    src: url("./iconfont.eot");

    src: url("./iconfont.eot?#iefix") format("eot"),

         url("./iconfont.woff") format("woff"),

         url("./iconfont.ttf") format("truetype");

}


7.定義圖片大小限制


加載的單張圖片一般建議不超過30KB,避免大圖片加載時間長而阻塞頁面其他資源的下載,因此推薦在10KB以內。如果用戶上傳的圖片過大,建議設置告警系統,幫助我們觀察了解整個網站的圖片流量情況,做出進一步的改善。


四、腳本類


1.盡量使用id選擇器


選擇頁面DOM元素時盡量使用id選擇器,因為id選擇器速度最快。


2.合理緩存DOM對象


對于需要重復使用的DOM對象,要優先設置緩存變量,避免每次使用時都要從整個DOM樹中重新查找。


// 不推薦

$('#mod .active').remove('active');

$('#mod .not-active').addClass('active');


// 推薦

let $mod = $('#mod');

$mod.find('.active').remove('active');

$mod.find('.not-active').addClass('active');


3.頁面元素盡量使用事件代理,避免直接事件綁定


使用事件代理可以避免對每個元素都進行綁定,并且可以避免出現內存泄露及需要動態添加元素的事件綁定問題,所以盡量不要直接使用事件綁定。


// 不推薦

$('.btn').on('click', function(e){

    console.log(this);

});


// 推薦

$('body').on('click', '.btn', function(e){

    console.log(this);

});


4.使用touchstart代替click


由于移動端屏幕的設計,touchstart事件和click事件觸發時間之間存在300毫秒的延時,所以在頁面中沒有實現touchmove滾動處理的情況下,可以使用touchstart事件來代替元素的click事件,加快頁面點擊的響應速度,提高用戶體驗。但同時我們也要注意頁面重疊元素touch動作的點擊穿透問題。


// 不推薦

$('body').on('click', '.btn', function(e){

    console.log(this);

});


// 推薦

$('body').on('touchstart', '.btn', function(e){

    console.log(this);

});


5.避免touchmove、scroll連續事件處理


需要對touchmove、scroll這類可能連續觸發回調的事件設置事件節流,例如設置每隔16ms(60幀的幀間隔為16.7ms,因此可以合理地設置為16ms)才進行一次事件處理,避免頻繁的事件調用導致移動端頁面卡頓。


// 不推薦

$('.scroller').on('touchmove', '.btn', function(e){

    console.log(this);

});


// 推薦

$('.scroller').on('touchmove', '.btn', function(e){

    let self = this;

    setTimeout(function(){

        console.log(self);

    }, 16);

});


6.避免使用eval、with,使用join代替連接符+,推薦使用ECMAScript 6的字符串模板


這些都是一些基礎的安全腳本編寫問題,盡可能使用較率的特性來完成這些操作,避免不規范或不安全的寫法。


7.盡量使用ECMAScript 6+的特性來編程


ECMAScript 6+一定程度上更加安全,而且部分特性執行速度更快,也是未來規范的需要,所以推薦使用ECMAScript 6+的新特性來完成后面的開發。


五、渲染類


1.使用Viewport固定屏幕渲染,可以加速頁面渲染內容


一般認為,在移動端設置Viewport可以加速頁面的渲染,同時可以避免縮放導致頁面重排重繪。在移動端固定Viewport設置的方法如下。


<!-- 設置viewport不縮放 -->

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">


2.避免各種形式重排重繪


頁面的重排重繪很耗性能,所以一定要盡可能減少頁面的重排重繪,例如頁面圖片大小變化、元素位置變化等這些情況都會導致重排重繪。


3.使用CSS3動畫,開啟GPU加速


使用CSS3動畫時可以設置transform: translateZ(0)來開啟移動設備瀏覽器的GPU圖形處理加速,讓動畫過程更加流暢。


-webkit-transform: translateZ(0);

-ms-transform: translateZ(0);

-o-transform: translateZ(0);

transform: translateZ(0);


4.合理使用Canvas和requestAnimationFrame


選擇Canvas或requestAnimationFrame等更的動畫實現方式,盡量避免使用setTimeout、setInterval等方式來直接處理連續動畫。


5.SVG代替圖片


部分情況下可以考慮使用SVG代替圖片實現動畫,因為使用SVG格式內容更小,而且SVG DOM結構方便調整。


6.不濫用float


在DOM渲染樹生成后的布局渲染階段,使用float的元素布局計算比較耗性能,所以盡量減少float的使用,推薦使用固定布局或flex-box彈性布局的方式來實現頁面元素布局。


7.不濫用web字體或過多font-size聲明


過多的font-size聲明會增加字體的大小計算,而且也沒有必要的。


六、架構協議類


1.嘗試使用SPDY和HTTP 2


在條件允許的情況下可以考慮使用SPDY協議來進行文件資源傳輸,利用連接復用加快傳輸過程,縮短資源加載時間。HTTP 2在未來也是可以考慮嘗試的。


2.使用后端數據渲染


使用后端數據渲染的方式可以加快頁面內容的渲染展示,避免空白頁面的出現,同時可以解決移動端頁面SEO的問題。如果條件允許,后端數據渲染是一個很不錯的實踐思路。后面的章節會詳細介紹后端數據渲染的相關內容。


3.使用Native View代替DOM的性能劣勢


可以嘗試使用Native View的MNV開發模式來避免HTML DOM性能慢的問題,目前使用MNV的開發模式已經可以將頁面內容渲染體驗做到接近客戶端Native應用的體驗了。


關于頁面優化的常用技術手段和思路主要包括以上這些,盡管列舉出很多,但仍可能有少數遺漏,可見前端性能優化不是一件簡簡單單的事情,其涉及的內容很多。大家可以根據實際情況將這些方法應用到自己的項目當中,要想全部做到幾乎是不可能的,但做到用戶可接受的原則還是很容易實現的。


于此同時我們要清楚的是,在我們做到了優化的同時也付出了很大的代價,這也是前端優化的一個問題。理論上這些優化都是可以實現的,但是作為工程師我們也要明白懂得權衡。優化提升了用戶體驗,使數據加載更快,但是項目代碼卻可能打亂,異步內容要拆分出來,首屏的一個雪碧圖可能要分成兩個,頁面項目代碼維護成本成倍增加,項目結構也可能變得混亂。


所以前期在設計構建、組件的解決方案時要解決好異步的自動處理問題。任何一部分優化都可以做得很深入,但不一定都值得,在優化的同時也要盡量考慮性價比,這才是我們作為一名前端工程師處理前端優化時應該具有的正確思維。

藍藍設計m.sdgs6788.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務




日歷

鏈接

個人資料

藍藍設計的小編 http://m.sdgs6788.com

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 欧美日韩一区二区三区| 1000部精品久久久久久久久| 欧美日韩另类一区| 亚洲黄色有码视频| 久久久久久电影| 午夜精品久久久久久久99黑人 | 国产精品免费久久久久久| 亚洲乱码久久| 亚洲第一在线综合网站| 久久激情五月丁香伊人| 国产亚洲人成a一在线v站| 久久精品99国产精品| 亚洲欧美在线aaa| 国产视频一区二区在线观看 | 欧美a级一区二区| 久久久水蜜桃| **网站欧美大片在线观看| 免费在线观看一区二区| 乱中年女人伦av一区二区| 亚洲高清av在线| 亚洲国产经典视频| 欧美日韩国产美女| 亚洲欧美区自拍先锋| 亚洲男人影院| 激情亚洲成人| 亚洲国产精品成人一区二区 | 夜夜嗨av一区二区三区中文字幕| 欧美激情片在线观看| 欧美精品日韩www.p站| 一区二区欧美激情| 亚洲视频图片小说| 国产一区二区精品| 亚洲第一搞黄网站| 欧美三区在线| 久久久高清一区二区三区| 麻豆国产精品va在线观看不卡 | 男女视频一区二区| 欧美电影免费观看高清完整版| 日韩天堂在线视频| 亚洲一区二区三区视频| 伊人婷婷久久| 9色精品在线| 国内精品久久久久久影视8| 欧美国产日韩一区| 国产精品99一区| 久久婷婷影院| 欧美日韩美女在线| 久久久女女女女999久久| 欧美激情精品久久久六区热门 | 夜夜嗨av一区二区三区网站四季av| 日韩午夜高潮| 红桃av永久久久| 日韩写真在线| 在线免费观看视频一区| 一本久久综合亚洲鲁鲁五月天| 国产日韩欧美在线| 亚洲免费久久| 亚洲国产高清一区二区三区| 中文亚洲视频在线| 91久久久在线| 久久精品人人| 午夜久久久久久| 欧美激情精品久久久| 久久嫩草精品久久久精品| 欧美午夜精品久久久| 欧美激情一区二区| 国产综合香蕉五月婷在线| 夜夜嗨av一区二区三区四区 | 99re视频这里只有精品| 亚洲国产精品一区二区尤物区| 亚洲图片欧美午夜| 日韩视频中文字幕| 久久在线免费观看| 久久久久久久一区| 国产欧美日韩在线播放| 一区二区三区视频免费在线观看| 亚洲精选在线| 欧美jizz19性欧美| 美女精品在线| 一色屋精品亚洲香蕉网站| 欧美主播一区二区三区美女 久久精品人| 一区二区欧美激情| 欧美人交a欧美精品| 亚洲国产精品免费| 欧美日韩国产亚洲一区| 欧美激情中文不卡| 亚洲高清免费| 久久影视三级福利片| 老色鬼精品视频在线观看播放 | 免费观看成人www动漫视频| 国产欧美在线视频| 欧美亚洲视频一区二区| 欧美在线免费观看| 国产欧美在线视频| 欧美影院一区| 老司机凹凸av亚洲导航| 在线国产日韩| 欧美www视频在线观看| 亚洲大胆av| av成人免费在线观看| 欧美三级日韩三级国产三级 | 黄色av成人| 久久久精品日韩欧美| 免费观看在线综合| 91久久综合| 欧美日韩国产在线一区| 在线一区观看| 性欧美8khd高清极品| 国产一区二区三区观看| 久久五月婷婷丁香社区| 亚洲第一天堂av| 亚洲视频在线播放| 国产视频一区二区在线观看| 久久久国产精彩视频美女艺术照福利| 美日韩精品视频| 99精品黄色片免费大全| 国产精品久久久久久久久久久久久久 | 国内精品久久久久影院薰衣草 | 狠狠色狠狠色综合日日小说| 久久久噜噜噜久久狠狠50岁| 亚洲第一黄网| 亚洲欧美日韩爽爽影院| 韩国v欧美v日本v亚洲v| 欧美电影免费观看高清完整版| 一区二区三区四区蜜桃| 久久一二三区| 亚洲网站在线播放| 好吊视频一区二区三区四区| 美玉足脚交一区二区三区图片| 最新日韩精品| 久久激情一区| 一区二区欧美精品| 激情五月***国产精品| 欧美日韩午夜激情| 久久精品五月婷婷| 这里是久久伊人| 欧美电影免费观看大全| 午夜欧美大尺度福利影院在线看| 亚洲电影免费在线 | 你懂的亚洲视频| 亚洲欧美中文日韩在线| 亚洲精品看片| 狠狠色丁香久久综合频道| 欧美日韩一卡二卡| 美女脱光内衣内裤视频久久网站| 亚洲一区二区三区三| 亚洲日本国产| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美日韩免费观看一区| 久久久久久久综合| 亚洲视频第一页| 亚洲黄色性网站| 老司机亚洲精品| 久久国产一区二区| 亚洲女性喷水在线观看一区| 亚洲美女在线一区| 亚洲国产女人aaa毛片在线| 韩日成人在线| 国内精品国产成人| 国产视频一区在线观看| 国产精品视频内| 欧美亚韩一区| 欧美网站在线观看| 欧美日韩一本到| 欧美日韩调教| 欧美日韩一区在线| 欧美日本在线| 欧美日韩国产探花| 欧美日韩午夜精品| 欧美日韩精品欧美日韩精品| 欧美激情综合网| 欧美 日韩 国产一区二区在线视频| 欧美一区二区观看视频| 欧美一区二区大片| 欧美中文字幕不卡| 久久激情五月丁香伊人| 久久久久久久久久久成人| 欧美中文字幕在线| 久久久久久久久久久久久女国产乱| 久久精品国产欧美亚洲人人爽| 久久国产欧美| 美国十次了思思久久精品导航| 美女脱光内衣内裤视频久久网站| 欧美成人高清视频| 欧美日韩精品一区视频| 国产精品久久午夜夜伦鲁鲁| 国产精品国产三级欧美二区| 国产精品成人观看视频免费| 国产精品亚洲视频| 极品少妇一区二区三区精品视频| 在线高清一区| 日韩一级在线| 性视频1819p久久| 久久综合综合久久综合| 亚洲国产天堂久久综合网| 一本色道久久综合亚洲精品高清| 亚洲在线一区二区三区| 久久久噜噜噜久久人人看| 欧美激情麻豆| 国产欧美精品|