欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

前端優(yōu)化 10s 到 100ms 是如何做到的? - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >

前端優(yōu)化 10s 到 100ms 是如何做到的?

發(fā)表時(shí)間:2021-1-5

發(fā)布人:葵宇科技

瀏覽次數(shù):53

Open signal 官方提供了2019年2月份統(tǒng)計(jì)的全世界4G網(wǎng)絡(luò)覆蓋率和通信速率的統(tǒng)計(jì)分布圖如下,在目前移動(dòng)互聯(lián)網(wǎng)的浪潮下,我們要利用好用戶終端設(shè)備的每個(gè)字節(jié)的流量。

頁(yè)面性能和體驗(yàn)優(yōu)化并不是一蹴而就的,需要不斷的研究、跟蹤,發(fā)現(xiàn)問題,解決問題。但是我們可以在一開始編寫業(yè)務(wù)代碼的時(shí)候就做的更好,做到極致。

加載渲染鏈路優(yōu)化之道

從訪問 URL 到頁(yè)面呈現(xiàn),整個(gè)鏈路可以做優(yōu)化的思路。 

幸運(yùn)的是,W3C推薦的Navigation Timing標(biāo)準(zhǔn)中所定義的核心的頁(yè)面性能數(shù)據(jù),它包含了從上個(gè)頁(yè)面銷毀到跳轉(zhuǎn)到當(dāng)前頁(yè)面加載完成每個(gè)階段所消耗的時(shí)間。在canIuse上查到的兼容性也很好:

利用這個(gè)接口可以很方便的幫助我們排查鏈路問題。在Navigation Timing標(biāo)準(zhǔn)中介紹到這個(gè)API主要包含兩個(gè)接口:PerformanceTimingPerformanceNavigation,這兩個(gè)接口由瀏覽器進(jìn)行實(shí)現(xiàn)和維護(hù),當(dāng)瀏覽器創(chuàng)建頁(yè)面的時(shí)候就會(huì)把接口定義的相關(guān)數(shù)據(jù)掛載到window.performance.timing和window.performance.navigation這兩個(gè)屬性上。我們可以打開一個(gè)網(wǎng)頁(yè)看一下:


我們把這兩個(gè)圖對(duì)比一下,就可以很容易的排查出頁(yè)面的加載鏈路問題。

靜態(tài)資源鏈路

打開頁(yè)面的第一步是請(qǐng)求頁(yè)面的html,這里面涉及TTFB這個(gè)綜合指標(biāo)。同時(shí)如果有必要我們也可以統(tǒng)計(jì)DNS時(shí)間和TCP時(shí)間。
DNS時(shí)間:主要是根據(jù)請(qǐng)求域名查詢到對(duì)應(yīng)主機(jī)IP的時(shí)間。這個(gè)和DNS服務(wù)器有關(guān)系,也可能和本地緩存有關(guān),如果這個(gè)很慢,可以找服務(wù)商排查下問題。
TCP時(shí)間:TCP 是承接 HTTP 協(xié)議的下層協(xié)議。主要是路由到主機(jī) IP,并建立 TCP 鏈接的時(shí)間。這個(gè)時(shí)間反應(yīng)了服務(wù)器到用戶客戶端之間鏈路是否通暢,網(wǎng)絡(luò)是否通暢。
請(qǐng)求完HTML之后,就開始解析 HTML 代碼,按照從上至下、自然順序解析,解析內(nèi)聯(lián) CSS代碼或者加載外鏈CSS腳本,解析內(nèi)聯(lián) Javascript 腳本,或者加載外鏈 Javascript 腳本。由于瀏覽器是單線程的,這些 CSS 和 Javascript 腳本很可能就會(huì)造成頁(yè)面卡頓。

加載

CDN是內(nèi)容分發(fā)網(wǎng)絡(luò),主要用于緩存靜態(tài)資源。CDN服務(wù)商一般會(huì)在全國(guó)各地部署服務(wù),而且?guī)捄艽?,這樣訪問CDN的資源時(shí)就可以有較短的路由路徑,而且?guī)捯脖容^大,訪問比較快。

解析渲染

加載完JS和CSS之后,瀏覽器開始解析執(zhí)行。Chrome的渲染流程是這樣的:          

為了讓瀏覽器更快的解析渲染,我們需要考慮這幾點(diǎn):

  1. CSS 嵌套層級(jí)不要太深,不超過3級(jí),避免在最內(nèi)層使用通配選擇器。

  2. JS 腳本不要太復(fù)雜,考慮輕量化架構(gòu),降低 JS 復(fù)雜性,減少解析時(shí)間,盡量不要引用復(fù)雜的第三方腳本。

  3. 按需加載模塊,按需打包,首頁(yè)僅僅加載和執(zhí)行和首屏相關(guān)的腳本。其他腳本延遲加載執(zhí)行。

  4. 考慮依賴的第三方模塊是不是必須,需不需要精簡(jiǎn)。

  5. 打包優(yōu)化,code split 和 tree shaken。常用webpack和rollup的優(yōu)化。

  6. 用戶交互相關(guān)事件綁定(比如頁(yè)面scroll,用戶左右滑動(dòng)等),添加參數(shù){passive:true},減少瀏覽器事件等待。因?yàn)檫@些事件屬于可阻止事件,瀏覽器不知道用戶會(huì)不會(huì)阻止,所以需要等待js執(zhí)行,然后再做響應(yīng)。添加passive參數(shù),就告訴瀏覽器不用等待了。

  7. iOS8 以后的 iOS 支持wkwebview,但是很多 App 之前用的還是 uiwebview,建議轉(zhuǎn)換成wkwebview,獲得性能的提升(UIwebview在執(zhí)行 JS 時(shí)會(huì)阻塞 UI渲染進(jìn)程,WKwebview不會(huì))。

數(shù)據(jù)埋點(diǎn)

上面我們梳理了加載到解析渲染過程應(yīng)該做的事情,那么如果你這些都做好了,發(fā)現(xiàn)網(wǎng)頁(yè)表現(xiàn)依然不盡人意,那么你就要考慮做一下數(shù)據(jù)埋點(diǎn)。其實(shí)數(shù)據(jù)埋點(diǎn)在企業(yè)項(xiàng)目中也是必不可少的,和性能體驗(yàn)優(yōu)化構(gòu)成閉環(huán)。通過數(shù)據(jù)來發(fā)現(xiàn)頁(yè)面性能和體驗(yàn)的問題,更有針對(duì)的進(jìn)行解決。

事實(shí)上數(shù)據(jù)埋點(diǎn)分為三類:

  1. 業(yè)務(wù)埋點(diǎn),統(tǒng)計(jì)諸如 PV、UV、點(diǎn)擊率、流失率、轉(zhuǎn)化率等

  2. 大數(shù)據(jù)埋點(diǎn),統(tǒng)計(jì)與用戶行為相關(guān)信息,比如那個(gè)用戶點(diǎn)擊了那個(gè)商品,上報(bào)用戶 ID 和商品 ID,方便后臺(tái)分析用戶和商品的關(guān)系,可以用做大數(shù)據(jù)分析,推薦算法來為用戶推薦商品。

  3. 工程埋點(diǎn),統(tǒng)計(jì)工程上的數(shù)據(jù)信息,比如頁(yè)面秒開率,DNS 時(shí)間等。

當(dāng)然,實(shí)際的操作上不止這些,還有一些關(guān)于資源緩存的五種方案選擇與緩存優(yōu)化的五種方案。

相關(guān)案例查看更多