Vue SPA单页面的应用和对比

 更新时间:2022年08月05日 15:55:25   作者:饭啊饭°  
单页面是指整个应用程序只有一个唯一完整的 HTML 页面,而其它所谓的页面,其实都是组件片段而已,切换页面也只是切换一个 HTML 中显示不同的组件片段。在今后所有的开发项目都是单页面应用

一、什么是SPA

  • SPA(single-page-application)就是单页应用。
  • 它通过动态重写当前页面来与用户交互,这种方法避免了页面之间切换打断用户体验在单页应用中,所有必要的代码(HTML、JavaScript和CSS)都通过单个页面的加载而检索,或者根据需要(通常是为响应用户操作)动态装载适当的资源并添加到页面页面在任何时间点都不会重新加载,也不会将控制转移到其他页面。
  • 熟悉的JS框架如react , vue , angular , ember都属于SPA。

二、SPA和MPA的区别

MPA(MultiPage-page application)就是多页应用,每一个页面就是主页面,都是独立的。

区别:

 单页面应用(SPA)多页面应用(MPA)
组成一个主页面和多个页面片段多个主页面
刷新方式局部刷新整页刷新
url模式哈希模式历史模式
SEO搜索引擎优化难实现,可使用SSR方式改善容易实现
数据传递容易通过url,cookie,localStorage等传递
页面切换速度快、用户体验良好切换加载资源,速度慢,用户体验差
维护成本相对容易相对复杂

三、单页应用的优缺点

优点

  • 具有桌面应用的及时性、网站的可移植性和可访问性;
  • 用户体验好、快,内容的改变不需要重新加载整个页面;
  • 良好的前后端分离,分工更加明确。

缺点

  • 不利于搜索引擎的抓取;
  • 首次渲染速度相对较慢。

四、怎么解决SPA首屏加载速度慢

1、什么是首屏加载

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

2、加载慢的原因

  • 网络延时问题;
  • 资源文件体积是否过大;
  • 资源是否重复发送请求加载;
  • 加载脚本的时候,渲染内容堵塞。

3、解决方案

减小入口文件体积:常用的手段是路由懒加载,把不同路由对应的组件分割成不同的代码块,待路由被请求的时候会单独打包路由,使得入口文件变小,加载速度大大增加。在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 { 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压缩
  • 使用SSR:也就是服务端渲染,组件或页面通过服务器生成html字符串,再发送到浏览器。从头搭建一个服务端渲染是很复杂的,vue应用建议使用Nuxt.js实现服务端渲染。

全面的首屏优化方式:

到此这篇关于Vue SPA单页面的应用和对比的文章就介绍到这了,更多相关Vue SPA单页面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Vue和React分别实现锚点定位功能

    使用Vue和React分别实现锚点定位功能

    这篇文章主要为大家详细介绍了如何使用Vue和React分别实现锚点定位功能,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以学习一下
    2024-01-01
  • vue使用qrcode生成二维码的方法

    vue使用qrcode生成二维码的方法

    这篇文章给大家介绍了vue使用qrcode生成二维码的方法,在Vue中实现二维码生成需要使用第三方库来处理生成二维码的逻辑,常用的库有qrcode和vue-qrcode,所以接下来小编将给大家介绍vue qrcode生成二维码的方法示例,需要的朋友可以参考下
    2024-01-01
  • ElementUi中select框在页面滚动时el-option超出元素区域的问题解决

    ElementUi中select框在页面滚动时el-option超出元素区域的问题解决

    本文主要介绍了ElementUi中select框在页面滚动时el-option超出元素区域的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • vue+element-ui表格封装tag标签使用插槽

    vue+element-ui表格封装tag标签使用插槽

    这篇文章主要介绍了vue+element-ui表格封装tag标签使用插槽,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 手把手教你用VUE封装一个文本滚动组件

    手把手教你用VUE封装一个文本滚动组件

    封装组件相信对大家来说都不陌生了,下面这篇文章主要给大家介绍了关于用VUE封装一个文本滚动组件的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • VUE重点问题总结

    VUE重点问题总结

    本篇内容给大家总结了VUE的重要难点,并把代码做了详细分享,有兴趣的朋友参考学习下。
    2018-03-03
  • vue3使用vue-router及路由权限拦截方式

    vue3使用vue-router及路由权限拦截方式

    这篇文章主要介绍了vue3使用vue-router及路由权限拦截方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • elementplus card 悬浮菜单的实现

    elementplus card 悬浮菜单的实现

    本文主要介绍了elementplus card 悬浮菜单的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • vue-cli2,vue-cli3,vite 生产环境去掉console.log

    vue-cli2,vue-cli3,vite 生产环境去掉console.log

    console.log一般都是在开发环境下使用的,在生产环境下需要去除 ,本文主要介绍了vue-cli2,vue-cli3,vite 生产环境去掉console.log,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • vue如何使用媒体查询实现响应式

    vue如何使用媒体查询实现响应式

    这篇文章主要介绍了vue如何使用媒体查询实现响应式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论