相比于早些年先后端代码紧密耦合、后端工程师还得写前端代码的时代,现在已发展到先后端分离,这种开发方式大大提高了先后端项目的可维护性与开发效率,让先后端工程师关注于本身的主业。然而在带来便利的同时,也带来了一些弊端,好比首屏渲染时间(FCP)由于首屏须要请求更多内容,比原来多了更多HTTP的往返时间(RTT),这形成了白屏,若是白屏时间过长,用户体验会大打折扣,若是用户网速差,则FCP会更长。html
由此引伸出一系列的优化方法,骨架屏也所以被提出。前端
感兴趣的同窗能够加文末的微信群,一块儿讨论吧~vue
在 Google 提出的以用户为中心的四个页面性能衡量指标中,FP/FCP多是开发者们最熟悉的了:webpack
为了优化首屏渲染时间这个指标,减小白屏时间,前端仔们想了不少办法:git
Access-Control-Max-Age
减小预检请求,页面内跳转其余域名或请求其余域名的资源时使用浏览器prefetch预解析等;这里要介绍的就是优化用户等待体验的骨架屏,它能够被视为是原来加载菊花图的一种升级版,结合传统的首屏优化方法对应用进行优化能够达到不错的效果。github
骨架屏能够理解为是当数据还未加载进来前,页面的一个空白版本,一个简单的关键渲染路径。能够看一下下面Facebook的骨架屏实现,能够看到在页面彻底渲染完成以前,用户会看到一个样式简单,描绘了当前页面的大体框架的骨架屏页面,而后骨架屏中各个占位部分被实际资源彻底替换,这个过程当中用户会以为内容正在逐渐加载即将呈现,下降了用户的焦躁情绪,使得加载过程主观上变得流畅。web
能够看一下下面的示例图,第一个为骨架屏,第二个为菊花图,第三个为无优化,能够看到相比于传统的菊花图会在感官上以为内容出现的流畅而不突兀,体验更加优良。小程序
现在这项技术已经在Facebook、Google、支付宝、饿了么、简书、新浪微博、知乎、美团、领英等公司的产品中被普遍的使用。在论坛和社区也都有很多文章讨论骨架屏的实现和使用场景等。segmentfault
生成骨架屏的方式主要有:后端
.vue
文件处理为HTML
,插入到页面模板的挂载点中,完成骨架屏的注入。这种方式不甚文明,若是页面样式改变了,还得改一遍骨架屏,增长了维护成本。 骨架屏的样式实现参考 CodePen另外还有个插件 vue-skeleton-webpack-plugin,它将插入骨架屏的方式由手动改成自动,原理在构建时使用 Vue 预渲染功能,将骨架屏组件的渲染结果 HTML 片断插入 HTML 页面模版的挂载点中,将样式内联到 head
标签中。这个插件能够给单页面的不一样路由设置不一样的骨架屏,也能够给多页面设置,同时为了开发时调试方便,会将骨架屏做为路由写入router中,可谓是至关体贴了。
vue-skeleton-webpack-plugin
的具体使用参考 vue-style-codebase,主要关注build目录的几个文件,线上Demo 在Chrome的DevTools中把network的网速调为Gast 3G / Slow 3G
就能看到效果了~
网上的帖子大多深浅不一,甚至有些先后矛盾,在下的文章都是学习过程当中的总结,若是发现错误,欢迎留言指出~
参考:
PS:欢迎你们关注个人公众号【前端下午茶】,一块儿加油吧~
另外能够加入「前端下午茶交流群」微信群,长按识别下面二维码便可加我好友,备注加群,我拉你入群~