说说你对 SPA 单页面的理解,它的优缺点分别是什么?

2020-08-07 19:51发布

6条回答
水默
2楼 · 2020-08-08 11:01

首先:SPA的英文是single-page application ,整个项目中只有一个页面。其次,单页面的实现思路:就是在 Web 页面初始化时加载所有的 HTML、JavaScript 和 CSS,页面的内容的变化,靠动态创建dom。

也就是一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新请求(加载)或跳转;取而代之的是利用路由机制实现 HTML 内容的动态变换,UI 与用户的交互,避免页面的重新加载。

它的优点有三点:

第一点:用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染;

第二点:基于上面一点,SPA 对服务器的压力小;

第三点:前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理;

它的缺点也有三点:

第一点:初次加载耗时多,为实现单页 Web 应用功能及显示效果,需要在加载页面的时候将 JavaScript、CSS 统一加载,部分页面按需加载;

第二点:前进后退路由管理,由于单页应用在一个页面中显示所有的内容,所以不能使用浏览器的前进后退功能,所有的页面切换需要自己建立堆栈管理;

第三点:SEO 难度较大,由于所有的内容都在一个页面中动态替换显示,所以在 SEO 上其有着天然的弱势。


天空中飞的鱼儿
3楼 · 2020-12-11 16:15

SPA( single-page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS

一旦页> 面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转;

取而代之的是利用路由机制实现 > HTML 内容的变换,UI 与用户的交互,避免页面的重新加载。


安之
4楼 · 2021-08-12 16:09

首先:SPA的英文是single-page application ,整个项目中只有一个页面。其次,单页面的实现思路:就是在 Web 页面初始化时加载所有的 HTML、JavaScript 和 CSS,页面的内容的变化,靠动态创建dom。

也就是一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新请求(加载)或跳转;取而代之的是利用路由机制实现 HTML 内容的动态变换,UI 与用户的交互,避免页面的重新加载。


它的优点有三点:

第一点:用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染;

第二点:基于上面一点,SPA 对服务器的压力小;

第三点:前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理;


爱学习的小巴
5楼 · 2021-08-13 13:31

SPA( single-page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。一旦页> 面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转;取而代之的是利用路由机制实现 > HTML 内容的变换,UI 与用户的交互,避免页面的重新加载。

优点:用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染;基于上面一点,SPA 相对对服务器压力小;前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理;

缺点:初次加载耗时多:为实现单页 Web 应用功能及显示效果,需要在加载页面的时候将 JavaScript、CSS 统一> 加载,部分页面按需加载;前进后退路由管理:由于单页应用在一个页面中显示所有的内容,所以不能使用浏览器的前进后退功能,所> 有的页面切换需要自己建立堆栈管理;SEO 难度较大:由于所有的内容都在一个页面中动态替换显示,所以在 SEO 上其有着天然的弱势。


征戰撩四汸
6楼 · 2021-08-17 17:38

SPA( single-page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS

一旦页> 面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转;

取而代之的是利用路由机制实现 > HTML 内容的变换,UI 与用户的交互,避免页面的重新加载。

优点:
用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染;
基于上面一点,SPA 相对对服务器压力小;
前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理;

缺点:
初次加载耗时多:为实现单页 Web 应用功能及显示效果,需要在加载页面的时候将 JavaScript、CSS 统一> 加载,部分页面按需加载;
前进后退路由管理:由于单页应用在一个页面中显示所有的内容,所以不能使用浏览器的前进后退功能,所> 有的页面切换需要自己建立堆栈管理;
SEO 难度较大:由于所有的内容都在一个页面中动态替换显示,所以在 SEO 上其有着天然的弱势。


风中浪子
7楼 · 2021-08-23 17:08

优点

  • 单页应用前后端分离,使得前端负责页面展示,后端负责提供存储和计算,开发更加专注化和专业化;

  • 具备良好的用户交互性,免去了刷新页面重新加载的步骤,页面响应性更好,响应速度更快;

  • 对于后端而言免去了渲染页面的工作,减少了服务器的压力;

  • 前端组件化,开发更加规范化;

  • 对移动平台友好,且方便在不同平台之间移植,同一套界面可以多处使用。

缺点

  • 对于SEO不友好,搜索引擎难以对单页应用进行索引;

  • 对于前端路由,如前进、后退、书等签需要额外的程序进行操作管理,且支持性不佳;

  • 初次加载所需加载的代码和资源文件较大,耗时较长;

  • 前后端分离带来的身份验证和鉴权问题需要额外解决;

  • 加大了前端开发的复杂程度,对前端开发人员的要求变高,开发成本可能有所提升。


相关问题推荐

  • 回答 14

    1.重构响应式系统,使用Proxy替换Object.defineProperty,使用Proxy优势:•可直接监听数组类型的数据变化•监听的目标为对象本身,不需要像Object.defineProperty一样遍历每个属性,有一定的性能提升•可拦截apply、ownKeys、has等13种方法,而Object.define...

  • 回答 12

    vue页面跳转后返回原页面初始位置        vue页面跳转到新页面之后,再由新页面返回到原页面时候若想返回调出原页面的初始位置,怎么来解决这个问题呢?首先我们应该在跳出页面时候记录下跳出的scrollY,返回原页面的时候在设置返回位置为记录下的scrolly...

  • MVVM和MVM的不同?2020-05-09 15:51
    回答 9

    这个问题建议你系统了解下MVC→MVP→MVVM的进化历程。(1)首先说下MVC    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC开始是存在于桌面程序中,使用MVC的目的是将M和V的实现代码分离。从图里可以看...

  • 回答 13

    目前,对于SEO支持比较好的项目方案是采用服务端渲染。所以如果项目有SEO需求,那么比较好的方案是服务端渲染。如果你已经采用了前后分离的单页项目,而你的网站内容不需要AJAX去获取内容和展示内容,那么可以试试 prerender-spa-plugin 这个插件,这个插件是...

  • vue和bootstrap的区别2021-10-14 11:13
    回答 19

    Bootstrap和vue不是一个层级的东西.Bootstrap是在jquery时代的UI组件库,而且Bootstrap大部分组件是依赖css的,依赖jQuery的组件主要是有交互的弹窗组件、下拉菜单等

  • 回答 13

    首先你需要引入另一个界面,然后通过$refs.refName的方式调用弹框的方法后者直接把弹框的属性置成true。注意需要另一个页面渲染完成后才能用【$refs.refName】

  • 回答 16

    是的,前端不会Vue根本就没必要再聊下去了

  • 回答 7

    这里有一篇文章可以帮助你https://blog.csdn.net/qq_40282732/article/details/105962708

  • 回答 5

    内部图表大小是与div容器大小位置相关的,如果想调整图表大小位置,调整div的属性就可以。如果是想调整图表与div间上下左右留白,则设置grid属性就可以。

  • 回答 7

    使用 /deep/ 注意:使用 cass 和 less 只能使用 /deep/ 这个方法

  • 回答 4

    创建icons/svg文件夹将svg文件放在该文件夹下面在components文件夹中创建svgiconfont.vue文件文件内容:        [removed]  import '@/icons'  export default {    name: 'svg-icon',    props: {      iconClass: {      ...

  • 回答 3

    引用数据类型数组的元素是对象引用,没有实际的值,需要给它实例。例如date days = new date[5];days[0]  = new date(2000,12,3)每一个days都要去分配。而基础类型都有默认初始值。

  • 回答 5

    计算属性与响应式并不冲突对立的存在,计算属性往往是用于数据的聚合或者离散,数据响应式的话就是视图响应数据变动(先容我装个逼)在vue中就是通过watcher调用一次实例对象中data的数据(当然这层数据也会做一层映射,映射到实例的属性中)在数据的defineOb...

  • 回答 3

    Vue中有一个自带的transition组件,就是用来实现过渡效果的,具体怎么使用呢,很简单,其实就两个步骤:①用transition组件,把要做过渡效果的元素包起来②写上相应的过渡效果的css是不是很简单,比把大象装冰箱还简单。然而,并没有,在这两个步骤中,我们要...

没有解决我的问题,去提问