网页速度即体验速度:vueSPA(单页应用)首屏加载成就用户心动瞬间

简介: 欢迎来到前端入门之旅!

⭐  专栏简介


       欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。

       同时,我们也会关注最新的前端趋势和发展动态。随着Web技术的不断演进,前端开发也在不断推陈出新。我们会及时介绍最新的前端框架、工具和技术,使你能够站在前沿,与时俱进。通过掌握最新的前端技术,你将能够在竞争激烈的Web开发领域中有更大的竞争力。


📘  文章引言


一、什么是首屏加载


首屏时间(First Contentful Paint),指的是浏览器从响应用户输入网址地址,到首屏内容渲染完成的时间,此时整个网页不一定要全部渲染完成,但需要展示当前视窗需要的内容


首屏加载可以说是用户体验中最重要的环节


关于计算首屏时间


利用performance.timing提供的数据:


通过DOMContentLoad或者performance来计算出首屏时间


// 方案一:
document.addEventListener('DOMContentLoaded', (event) => {
    console.log('first contentful painting');
});
// 方案二:
performance.getEntriesByName("first-contentful-paint")[0].startTime
// performance.getEntriesByName("first-contentful-paint")[0]
// 会返回一个 PerformancePaintTiming的实例,结构如下:
{
  name: "first-contentful-paint",
  entryType: "paint",
  startTime: 507.80000002123415,
  duration: 0,
};


二、加载慢的原因


在页面渲染的过程,导致加载速度慢的因素可能如下:


网络延时问题

资源文件体积是否过大

资源是否重复发送请求去加载了

加载脚本的时候,渲染内容堵塞了


三、解决方案


常见的几种SPA首屏优化方式


减小入口文件积

静态资源本地缓存

UI框架按需加载

图片资源的压缩

组件重复打包

开启GZip压缩

使用SSR


减小入口文件体积


常用的手段是路由懒加载,把不同路由对应的组件分割成不同的代码块,待路由被请求的时候会单独打包路由,使得入口文件变小,加载速度大大增加


在vue-router配置路由的时候,采用动态加载路由的形式


routes:[ 
    path: 'Blogs',
    name: 'ShowBlogs',
    component: () => import('./components/ShowBlogs.vue')
]


以函数的形式加载路由,这样就可以把各自的路由文件分别打包,只有在解析给定的路由时,才会加载路由组件


静态资源本地缓存


后端返回资源问题:


采用HTTP缓存,设置Cache-Control,Last-Modified,Etag等响应头


采用Service Worker离线缓存


前端合理利用localStorage


UI框架按需加载


在日常使用UI框架,例如element-UI、或者antd,我们经常性直接饮用整个UI库


import ElementUI from 'element-ui'
Vue.use(ElementUI)


但实际上我用到的组件只有按钮,分页,表格,输入与警告 所以我们要按需引用


import { Button, Input, Pagination, Table, TableColumn, MessageBox } from 'element-ui';
Vue.use(Button)
Vue.use(Input)
Vue.use(Pagination)


组件重复打包


假设A.js文件是一个常用的库,现在有多个路由使用了A.js文件,这就造成了重复下载


解决方案:在webpack的config文件中,修改CommonsChunkPlugin的配置


minChunks: 3


minChunks为3表示会把使用3次及以上的包抽离出来,放进公共依赖文件,避免了重复加载组件


图片资源的压缩

图片资源虽然不在编码过程中,但它却是对页面性能影响最大的因素


对于所有的图片资源,我们可以进行适当的压缩


对页面上使用到的icon,可以使用在线字体图标,或者雪碧图,将众多小图标合并到同一张图上,用以减轻http请求压力。


开启GZip压缩


拆完包之后,我们再用gzip做一下压缩 安装compression-webpack-plugin


cnmp i compression-webpack-plugin -D


在vue.congig.js中引入并修改webpack配置


const CompressionPlugin = require('compression-webpack-plugin')
configureWebpack: (config) => {
        if (process.env.NODE_ENV === 'production') {
            // 为生产环境修改配置...
            config.mode = 'production'
            return {
                plugins: [new CompressionPlugin({
                    test: /\.js$|\.html$|\.css/, //匹配文件名
                    threshold: 10240, //对超过10k的数据进行压缩
                    deleteOriginalAssets: false //是否删除原文件
                })]
            }
        }


在服务器我们也要做相应的配置 如果发送请求的浏览器支持gzip,就发送给它gzip格式的文件 我的服务器是用express框架搭建的 只要安装一下compression就能使用


const compression = require('compression')
app.use(compression())  // 在其他中间件使用之前调用


使用SSR


SSR(Server side ),也就是服务端渲染,组件或页面通过服务器生成html字符串,再发送到浏览器


从头搭建一个服务端渲染是很复杂的,vue应用建议使用Nuxt.js实现服务端渲染


小结:


减少首屏渲染时间的方法有很多,总的来讲可以分成两大部分 :资源加载优化 和 页面渲染优化


下图是更为全面的首屏优化的方案


大家可以根据自己项目的情况选择各种方式进行首屏渲染的优化



⭐  写在最后

请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.


✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式


✅ 认为我部分代码过于老旧,可以提供新的API或最新语法


✅ 对于文章中部分内容不理解


✅ 解答我文章中一些疑问


✅ 认为某些交互,功能需要优化,发现BUG


✅ 想要添加新功能,对于整体的设计,外观有更好的建议


最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧!

相关文章
|
3月前
|
缓存 前端开发 JavaScript
在浏览器的舞台上演:前端如何挑战页面刷新的极限
在浏览器的舞台上演:前端如何挑战页面刷新的极限
60 0
|
3月前
|
前端开发 JavaScript API
|
6月前
无人问津的设置页面,如何做到小而精美?
无人问津的设置页面,如何做到小而精美?
31 0
|
移动开发 前端开发
公司产品移动端网页-前端网页设计技术精美网站源码HTML+CSS+JS
公司产品移动端网页-前端网页设计技术精美网站源码HTML+CSS+JS
121 0
公司产品移动端网页-前端网页设计技术精美网站源码HTML+CSS+JS
|
前端开发
仿王者荣耀网页-前端网页技术设计完整精美源码HTML+CSS+JS
仿王者荣耀网页-前端网页技术设计完整精美源码HTML+CSS+JS
313 0
仿王者荣耀网页-前端网页技术设计完整精美源码HTML+CSS+JS
|
JavaScript 前端开发
|
PHP 数据库
Dsicuz移动端二开之关注和粉丝页面以及关注状态处理(1)
Dsicuz移动端二开之关注和粉丝页面以及关注状态处理
170 0
Dsicuz移动端二开之关注和粉丝页面以及关注状态处理(1)
Dsicuz移动端二开之关注和粉丝页面以及关注状态处理(2)
Dsicuz移动端二开之关注和粉丝页面以及关注状态处理
153 0
Dsicuz移动端二开之关注和粉丝页面以及关注状态处理(2)
|
编解码 程序员
隐藏在直播源码内的开屏流畅度秘诀,快来学习一下
直播软件不好用,原因有很多,可能是功能分类不够明确,可能是美颜、萌颜不好看,可能是主播普遍水平低,可能是视频永远载入不进来……为了优化直播软件,程序员大哥们操碎了心,买买买,买更高速的宽带,接接接,接更多的美颜萌颜,但即使直播平台用再好再贵的CDN和服务器,也很难从用户方改变用户设备配置不统一,部分设备配置低的问题。
|
移动开发 前端开发 JavaScript
移动端H5多页开发拍门砖经验
两年前刚接触移动端开发,刚开始比较疑惑,每次遇到问题都是到社区里提问或者吸取前辈的经验分享,感谢热衷于分享的开发者为前端社区带来欣欣向上的生命力。本文结合先前写的文章和开发经验分享给大家,希望也能帮助刚步入移动端开发的新人解惑。
2302 0