整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Vue項(xiàng)目骨架屏注入實(shí)踐和方法總結(jié)

          比于早些年前后端代碼緊密耦合、后端工程師還得寫前端代碼的時(shí)代,如今已發(fā)展到前后端分離,這種開發(fā)方式大大提升了前后端項(xiàng)目的可維護(hù)性與開發(fā)效率,讓前后端工程師關(guān)注于自己的主業(yè)。然而在帶來便利的同時(shí),也帶來了一些弊端,比如首屏渲染時(shí)間(FCP)因?yàn)槭灼列枰埱蟾鄡?nèi)容,比原來多了更多HTTP的往返時(shí)間(RTT),這造成了白屏,如果白屏?xí)r間過長,用戶體驗(yàn)會大打折扣,如果用戶網(wǎng)速差,則FCP會更長。

          1. FCP優(yōu)化

          在 Google 提出的以用戶為中心的四個(gè)頁面性能衡量指標(biāo)中,F(xiàn)P/FCP可能是開發(fā)者們最熟悉的了

          為了優(yōu)化首屏渲染時(shí)間這個(gè)指標(biāo),減少白屏?xí)r間,前端仔們想了很多辦法:

          • 加速或減少HTTP請求損耗:使用CDN加載公用庫,使用強(qiáng)緩存和協(xié)商緩存,使用域名收斂,小圖片使用Base64代替,使用Get請求代替Post請求,設(shè)置 Access-Control-Max-Age 減少預(yù)檢請求,頁面內(nèi)跳轉(zhuǎn)其他域名或請求其他域名的資源時(shí)使用瀏覽器prefetch預(yù)解析等;
          • 延遲加載:非重要的庫、非首屏圖片延遲加載,SPA的組件懶加載等;
          • 減少請求內(nèi)容的體積:開啟服務(wù)器Gzip壓縮,JS、CSS文件壓縮合并,減少cookies大小,SSR直接輸出渲染后的HTML等;
          • 瀏覽器渲染原理:優(yōu)化關(guān)鍵渲染路徑,盡可能減少阻塞渲染的JS、CSS;
          • 優(yōu)化用戶等待體驗(yàn):白屏使用加載進(jìn)度條、菊花圖、骨架屏代替等;

          這里要介紹的就是優(yōu)化用戶等待體驗(yàn)的骨架屏,它可以被視為是原來加載菊花圖的一種升級版,結(jié)合傳統(tǒng)的首屏優(yōu)化方法對應(yīng)用進(jìn)行優(yōu)化可以達(dá)到不錯(cuò)的效果。

          2. 骨架屏

          骨架屏可以理解為是當(dāng)數(shù)據(jù)還未加載進(jìn)來前,頁面的一個(gè)空白版本,一個(gè)簡單的關(guān)鍵渲染路徑。可以看一下下面Facebook的骨架屏實(shí)現(xiàn),可以看到在頁面完全渲染完成之前,用戶會看到一個(gè)樣式簡單,描繪了當(dāng)前頁面的大致框架的骨架屏頁面,然后骨架屏中各個(gè)占位部分被實(shí)際資源完全替換,這個(gè)過程中用戶會覺得內(nèi)容正在逐漸加載即將呈現(xiàn),降低了用戶的焦躁情緒,使得加載過程主觀上變得流暢。

          可以看一下下面的示例圖,第一個(gè)為骨架屏,第二個(gè)為菊花圖,第三個(gè)為無優(yōu)化,可以看到相比于傳統(tǒng)的菊花圖會在感官上覺得內(nèi)容出現(xiàn)的流暢而不突兀,體驗(yàn)更加優(yōu)良。

          如今這項(xiàng)技術(shù)已經(jīng)在Facebook、Google、支付寶、餓了么、簡書、新浪微博、知乎、美團(tuán)、領(lǐng)英等公司的產(chǎn)品中被廣泛的使用。在論壇和社區(qū)也都有不少文章討論骨架屏的實(shí)現(xiàn)和使用場景等。

          3. 生成骨架屏的方法

          生成骨架屏的方式主要有:

          1. 手寫HTML、CSS的方式為目標(biāo)頁定制骨架屏 做法可以參考<Vue頁面骨架屏注入實(shí)踐>,主要思路就是使用 vue-server-renderer 這個(gè)本來用于服務(wù)端渲染的插件,用來把我們寫的.vue文件處理為HTML,插入到頁面模板的掛載點(diǎn)中,完成骨架屏的注入。這種方式不甚文明,如果頁面樣式改變了,還得改一遍骨架屏,增加了維護(hù)成本。 骨架屏的樣式實(shí)現(xiàn)參考 CodePen
          2. 使用圖片作為骨架屏; 簡單暴力,讓UI同學(xué)花點(diǎn)功夫吧哈哈;小米商城的移動端頁面采用的就是這個(gè)方法,它是使用了一個(gè)Base64的圖片來作為骨架屏。
          3. 自動生成并自動插入靜態(tài)骨架屏 這種方法跟第一種方法類似,不過是自動生成骨架屏,可以關(guān)注下餓了么開源的插件 page-skeleton-webpack-plugin ,它根據(jù)項(xiàng)目中不同的路由頁面生成相應(yīng)的骨架屏頁面,并將骨架屏頁面通過 webpack 打包到對應(yīng)的靜態(tài)路由頁面中,不過要注意的是這個(gè)插件目前只支持history方式的路由,不支持hash方式,且目前只支持首頁的骨架屏,并沒有組件級的局部骨架屏實(shí)現(xiàn),作者說以后會有計(jì)劃實(shí)現(xiàn)(issue9)。

          另外還有個(gè)插件 vue-skeleton-webpack-plugin,它將插入骨架屏的方式由手動改為自動,原理在構(gòu)建時(shí)使用 Vue 預(yù)渲染功能,將骨架屏組件的渲染結(jié)果 HTML 片段插入 HTML 頁面模版的掛載點(diǎn)中,將樣式內(nèi)聯(lián)到 head 標(biāo)簽中。這個(gè)插件可以給單頁面的不同路由設(shè)置不同的骨架屏,也可以給多頁面設(shè)置,同時(shí)為了開發(fā)時(shí)調(diào)試方便,會將骨架屏作為路由寫入router中,可謂是相當(dāng)體貼了。

          vue-skeleton-webpack-plugin的具體使用參考 vue-style-codebase,主要關(guān)注build目錄的幾個(gè)文件,線上Demo 在Chrome的DevTools中把network的網(wǎng)速調(diào)為Gast 3G / Slow 3G就能看到效果了~

          比于早些年前后端代碼緊密耦合、后端工程師還得寫前端代碼的時(shí)代,如今已發(fā)展到前后端分離,這種開發(fā)方式大大提升了前后端項(xiàng)目的可維護(hù)性與開發(fā)效率,讓前后端工程師關(guān)注于自己的主業(yè)。然而在帶來便利的同時(shí),也帶來了一些弊端,比如首屏渲染時(shí)間(FCP)因?yàn)槭灼列枰埱蟾鄡?nèi)容,比原來多了更多HTTP的往返時(shí)間(RTT),這造成了白屏,如果白屏?xí)r間過長,用戶體驗(yàn)會大打折扣,如果用戶網(wǎng)速差,則FCP會更長。

          由此引申出一系列的優(yōu)化方法,骨架屏也因此被提出,本文就以 Vue 項(xiàng)目中的骨架屏為例,探討一下骨架屏的優(yōu)缺點(diǎn)和注入方式。

          感興趣的同學(xué)可以加一下微信群,一起討論吧~

          1. FCP 優(yōu)化

          在 Google 提出的以用戶為中心的四個(gè)頁面性能衡量指標(biāo)中,F(xiàn)P/FCP可能是開發(fā)者們最熟悉的了:

          為了優(yōu)化首屏渲染時(shí)間這個(gè)指標(biāo),減少白屏?xí)r間,前端仔們想了很多辦法:

          • 加速或減少HTTP請求損耗:使用CDN加載公用庫,使用強(qiáng)緩存和協(xié)商緩存,使用域名收斂,小圖片使用Base64代替,使用Get請求代替Post請求,設(shè)置 Access-Control-Max-Age 減少預(yù)檢請求,頁面內(nèi)跳轉(zhuǎn)其他域名或請求其他域名的資源時(shí)使用瀏覽器prefetch預(yù)解析等;
          • 延遲加載:非重要的庫、非首屏圖片延遲加載,SPA的組件懶加載等;
          • 減少請求內(nèi)容的體積:開啟服務(wù)器Gzip壓縮,JS、CSS文件壓縮合并,減少cookies大小,SSR直接輸出渲染后的HTML等;
          • 瀏覽器渲染原理:優(yōu)化關(guān)鍵渲染路徑,盡可能減少阻塞渲染的JS、CSS;
          • 優(yōu)化用戶等待體驗(yàn):白屏使用加載進(jìn)度條、菊花圖、骨架屏代替等;

          這里要介紹的就是優(yōu)化用戶等待體驗(yàn)的骨架屏,它可以被視為是原來加載菊花圖的一種升級版,結(jié)合傳統(tǒng)的首屏優(yōu)化方法對應(yīng)用進(jìn)行優(yōu)化可以達(dá)到不錯(cuò)的效果。

          2. 骨架屏

          骨架屏可以理解為是當(dāng)數(shù)據(jù)還未加載進(jìn)來前,頁面的一個(gè)空白版本,一個(gè)簡單的關(guān)鍵渲染路徑。可以看一下下面Facebook的骨架屏實(shí)現(xiàn),可以看到在頁面完全渲染完成之前,用戶會看到一個(gè)樣式簡單,描繪了當(dāng)前頁面的大致框架的骨架屏頁面,然后骨架屏中各個(gè)占位部分被實(shí)際資源完全替換,這個(gè)過程中用戶會覺得內(nèi)容正在逐漸加載即將呈現(xiàn),降低了用戶的焦躁情緒,使得加載過程主觀上變得流暢。

          可以看一下下面的示例圖,第一個(gè)為骨架屏,第二個(gè)為菊花圖,第三個(gè)為無優(yōu)化,可以看到相比于傳統(tǒng)的菊花圖會在感官上覺得內(nèi)容出現(xiàn)的流暢而不突兀,體驗(yàn)更加優(yōu)良。

          如今這項(xiàng)技術(shù)已經(jīng)在Facebook、Google、支付寶、餓了么、簡書、新浪微博、知乎、美團(tuán)、領(lǐng)英等公司的產(chǎn)品中被廣泛的使用。在論壇和社區(qū)也都有不少文章討論骨架屏的實(shí)現(xiàn)和使用場景等。

          3. 生成骨架屏的方法

          生成骨架屏的方式主要有:

          1. 手寫HTML、CSS的方式為目標(biāo)頁定制骨架屏 做法可以參考,主要思路就是使用 vue-server-renderer 這個(gè)本來用于服務(wù)端渲染的插件,用來把我們寫的 .vue文件處理為 HTML,插入到頁面模板的掛載點(diǎn)中,完成骨架屏的注入。這種方式不甚文明,如果頁面樣式改變了,還得改一遍骨架屏,增加了維護(hù)成本。
          2. 使用圖片作為骨架屏;簡單暴力,讓UI同學(xué)花點(diǎn)功夫吧哈哈;小米商城的移動端頁面采用的就是這個(gè)方法,它是使用了一個(gè)Base64的圖片來作為骨架屏。
          3. 自動生成并自動插入靜態(tài)骨架屏 這種方法跟第一種方法類似,不過是自動生成骨架屏,可以關(guān)注下餓了么開源的插件 page-skeleton-webpack-plugin ,它根據(jù)項(xiàng)目中不同的路由頁面生成相應(yīng)的骨架屏頁面,并將骨架屏頁面通過 webpack 打包到對應(yīng)的靜態(tài)路由頁面中,不過要注意的是這個(gè)插件目前只支持history方式的路由,不支持hash方式,且目前只支持首頁的骨架屏,并沒有組件級的局部骨架屏實(shí)現(xiàn),作者說以后會有計(jì)劃實(shí)現(xiàn)。

          另外還有個(gè)插件 vue-skeleton-webpack-plugin,它將插入骨架屏的方式由手動改為自動,原理在構(gòu)建時(shí)使用 Vue 預(yù)渲染功能,將骨架屏組件的渲染結(jié)果 HTML 片段插入 HTML 頁面模版的掛載點(diǎn)中,將樣式內(nèi)聯(lián)到 head標(biāo)簽中。這個(gè)插件可以給單頁面的不同路由設(shè)置不同的骨架屏,也可以給多頁面設(shè)置,同時(shí)為了開發(fā)時(shí)調(diào)試方便,會將骨架屏作為路由寫入router中,可謂是相當(dāng)體貼了。

          vue-skeleton-webpack-plugin 的具體使用參考 vue-style-codebase,主要關(guān)注build目錄的幾個(gè)文件,實(shí)例跑起來之后在 Chrome 的 DevTools 中把 network 的網(wǎng)速調(diào)為 Gast3G/Slow3G 就能看到效果了~

          信IDWEB_wysj(點(diǎn)擊關(guān)注) ◎ ◎ ◎ ◎ ◎◎◎◎◎一┳═┻︻▄

          (頁底留言開放,歡迎來吐槽)

          ● ● ●

          前 言

          晚上逛論壇看到一篇對從事HTML5前端開發(fā)的文章寫的非常不錯(cuò),和目前的市場形勢差不多,然后我在其基礎(chǔ)上給大家進(jìn)行加工總結(jié)一下分享給大家.今天我們談?wù)摰脑掝}是<<為什么從事HTML5前端開發(fā)越來越火,工資高,并且還漲的快>>,針對這個(gè)問題進(jìn)行分析分析.

          俗話說的好:”沒有調(diào)查,就沒有發(fā)言權(quán)”,同樣在市場浪潮中,同樣如果沒有實(shí)際調(diào)查,不要輕易發(fā)表言論,誤導(dǎo)他人.

          現(xiàn)在主要從下面幾個(gè)方面給大家進(jìn)行總結(jié)和分析呢?

          目 錄

          1. HTML5前端開發(fā)的薪資

          2. 市場的供求關(guān)系

          3. HTML5語言優(yōu)勢

          HTML5前端開發(fā)的薪資

          首先我們來看看2016年上半年前端端開發(fā)的薪資情況(參考了拉勾網(wǎng),智聯(lián)招聘,51job,前程無憂,Boss直聘上的數(shù)據(jù))。

          1.我們來看看北京的薪資情況

          說明:北京前端開發(fā)平均工資:¥10576元/月

          2.我們來看看廣州的薪資情況

          說明:廣州前端開發(fā)平均工資:¥8124元/月

          3.我們來看看上海的薪資情況

          說明:上海前端開發(fā)平均工資:¥9270元/月

          4.我們來看看深圳的薪資情況

          說明:深圳前端開發(fā)平均工資:¥11464元/月

          因此綜上的統(tǒng)計(jì)供大家參考.在技術(shù)類里,HTML5技術(shù)能力的值錢程度很突出,名列前茅。這正代表了前端技術(shù)的當(dāng)前行情。現(xiàn)在HTML5 有過1-2年工作經(jīng)驗(yàn)的,跳槽工資的漲幅只高不低.

          那么問題來了,導(dǎo)致這一現(xiàn)象的原因是什么呢?看下面分析……

          具體分析點(diǎn)擊“閱讀原文”

          ???


          主站蜘蛛池模板: 日韩精品一区二区三区中文| 日本精品一区二区三区视频 | 无码日韩人妻AV一区二区三区 | 久久亚洲色一区二区三区| 亚洲线精品一区二区三区| 国产精品一区二区无线| 精品福利视频一区二区三区| 狠狠色婷婷久久一区二区| 精品一区二区三区无码视频| 无码一区18禁3D| 中文字幕av日韩精品一区二区| 国产一区在线视频| 中文字幕无码免费久久9一区9| 国产伦精品一区二区三区四区 | 在线观看视频一区二区| 中文字幕在线一区二区在线| 亚洲综合一区二区国产精品| 日韩一区二区电影| 日韩精品一区二区三区大桥未久 | 一区二区三区日韩精品| 国产AV午夜精品一区二区三区| 色老板在线视频一区二区| 成人午夜视频精品一区| 国精产品一区二区三区糖心| 国精产品一区一区三区免费视频 | 国产精品久久一区二区三区| 亚洲国产成人久久综合一区| 99热门精品一区二区三区无码| 中文字幕乱码亚洲精品一区| 亚洲中文字幕久久久一区| 欧美激情国产精品视频一区二区| 亚洲精品日韩一区二区小说| 相泽南亚洲一区二区在线播放| 日本免费精品一区二区三区| 国产精品一区三区| 无码人妻视频一区二区三区| 亚洲一区二区三区播放在线| 蜜桃传媒一区二区亚洲AV| 日韩熟女精品一区二区三区 | 国产麻豆剧果冻传媒一区| 秋霞鲁丝片一区二区三区|