在大前端盛行的今天,似乎前后端分离的开发模式才是大势所趋,而SPA的概念更是应运而生。现在随便构建一个web应用程序如果你不是使用SPA的话,就会感觉有点low,但是真的是这样吗?今天这篇文章我们就来一起探讨下,构建现代web应用时该如何进行选择。

作者:依乐祝
博客园链接:https://www.cnblogs.com/yilezhu/p/10626459.html

目前大伙都知道的是可通过两种通用方法来构建 Web 应用程序:在服务器上执行大部分应用程序逻辑的传统 Web 应用程序,以及在 Web 浏览器中执行大部分用户界面逻辑的单页应用程序 (SPA),后者主要使用 Web API 与 Web 服务器通信。 也可以将两种方法混合使用,最简单的方法是在更大型的传统 Web 应用程序中承载一个或多个丰富 SPA 类子应用程序。
但合适使用传统 Web 应用程序,何时使用SPA呢?针对这个问题最近在看微软《使用 ASP.NET Core 和 Azure 构建新式 Web 应用程序》白皮书的时候。里面如是说:

何时应使用传统 Web 应用程序:

  • 应用程序的客户端要求简单,甚至要求只读。
  • 应用程序需在不支持 JavaScript 的浏览器中工作。
  • 团队不熟悉 JavaScript 或 TypeScript 开发技术。

何时应使用 SPA:

  • 应用程序必须公开具有许多功能的丰富的用户界面。
  • 团队熟悉 JavaScript 或 TypeScript 开发。
  • 应用程序已为其他(内部或公共)客户端公开 API。

此外,SPA 框架还需要更强的体系结构和安全专业知识。 相较于传统 Web 应用程序,SPA 框架需要进行频繁的更新和使用新框架,因此改动更大。 相较于传统 Web 应用,SPA 应用程序在配置自动化生成和部署过程以及利用部署选项(如容器)方面的难度更大。

所以如果你要使用 SPA 模型改进用户体验时必须权衡这些注意事项。

Razor 组件

ASP.NET Core 3.0 引入了一种新模型,用于构建称为 Razor 组件的丰富的、交互式和可组合的 UI。 Razor 组件允许开发者在服务器上使用 Razor 构建 UI,并使用名为 WebAssembly 的 JavaScript 库将此代码传递到浏览器和执行客户端。 ASP.NET Core 3.0 仍在开发中,但你应该会期望在本电子书的 3.0 更新中看到有关此技术的详细信息。 有关 Razor 组件(名为 Blazor 的代码)的详细信息,请参阅 Blazor 入门

何时选择传统 Web 应用

以下内容详细介绍前面提到的选择传统 Web 应用程序的原因。

应用程序的客户端要求简单,可能要求只读

对许多 Web 应用程序而言,其大部分用户的主要使用方式是只读。 只读(或以读取为主)应用程序往往比那些维护和操作大量状态的应用程序简单得多。 例如,搜索引擎可能由一个带有文本框的入口点和用于显示搜索结果的第二页组成。 匿名用户可以轻松提出请求,并且很少需要使用客户端逻辑。 同样,一般而言,博客或内容管理系统中面向公众的应用程序主要包含的内容与客户端行为关系不大。 此类应用程序容易构建为基于服务器的传统 Web 应用程序,在 Web 服务器上执行逻辑,并呈现要在浏览器中显示的 HTML。事实上,网站的每个独特页面都有自己的 URL,搜索引擎可以将其存为书签和编入索引(默认设置,无需将其添加为应用程序的单独功能),这也是此类情况的一个明显优势。

应用程序需在不支持 JavaScript 的浏览器中工作

如需在有限或不支持 JavaScript 的浏览器中工作的 Web 应用程序,则应使用传统的 Web 应用工作流编写(或至少可以回退到此类行为)。 SPA 需要客户端 JavaScript 才能正常工作;如果没有客户端 JavaScript,SPA 不是好的选择。

团队不熟悉 JavaScript 或 TypeScript 开发技术

如果团队不熟悉 JavaScript 或 TypeScript,但熟悉服务器端 Web 应用程序开发,那相较于 SPA,他们交付传统 Web 应用的速度可能更快。 除非以学习 SPA 编程为目的,或需要 SPA 提供用户体验,否则对已经熟悉构建传统 Web 应用的团队而言,选择传统 Web 应用的工作效率更高。

何时选择 SPA

以下内容详细介绍何时为 Web 应用选择单页应用程序开发样式。

应用程序必须公开具有许多功能的丰富用户界面

SPA 可支持丰富客户端功能,当用户执行操作或在应用的各区域间导航时无需重新加载页面。 SPA 很少需要重新加载整个页面,因此加载速度更快,可在后台提取数据,并且对单个用户操作的响应更快。 SPA 支持增量更新,可保存尚未完成的窗体或文档,而无需用户单击按钮提交窗体。 SPA 支持丰富的客户端行为,例如拖放,比传统应用程序更容易操作。 可以将 SPA 设计为在断开连接的模式下运行,对客户端模型进行更新,并在重新建立连接后将更新最终同步回服务器。 如果应用要求包括丰富的功能,且超出了典型 HTML 窗体提供的功能,则应选择 SPA 样式应用程序。

请注意,SPA 通常需要实现内置于传统 Web 应用中的功能,例如在反映当前操作的地址栏中显示有意义的 URL(并允许用户将此 URL 存为书签或对其进行深层链接以便返回此 URL)。 SPA 还应允许用户使用浏览器的后退和前进按钮寻找用户意料之中的结果。

团队熟悉 JavaScript 和/或 TypeScript 开发

编写 SPA 需要熟悉 JavaScript 和/或 TypeScript 以及客户端编程技术和库。 团队应有能力像使用 Angular 一样使用 SPA 框架编写新式 JavaScript。

参考 - SPA 框架

应用程序已为其他(内部或公共)客户端公开 API

如果已提供一个 Web API 供其他客户端使用,则相较于在服务器端窗体中复制逻辑,创建一个利用这些 API 的 SPA 实现更加容易。用户与应用程序交互时,SPA 广泛使用 Web API 来查询和更新数据。

决策表 - 选传统 Web 或 SPA

下面的决策表总结了在传统 Web 应用程序和 SPA 之间进行选择时要考虑的一些基本因素。

因素 传统 Web 应用 单页面应用程序
需要团队熟悉 JavaScript/TypeScript 最低 必需
支持不带脚本的浏览器 支持 不支持
客户端应用程序行为极少 适合 不必要
丰富而复杂的用户界面要求 受限 适合

总结

今天给大家介绍了在构建现代Web应用时究竟是选择传统web应用还是spa的一些参考,希望对大家在进行现代web开发时技术选型时有所帮助。如果你有不同的看法可以在下面留言。

构建现代Web应用时究竟是选择传统web应用还是SPA的更多相关文章

  1. 创建 maven web 项目时 ,更改 为 Dynamic web module 为 3.0 时 项目报错

    更改 项目 project facets 将 dynamic web module  改为 3.0 ,如果 java 的 版本 为 1.7 以下 ,项目会出现 叉 , 原因是  web 3.0  要和 ...

  2. 【WEB API项目实战干货系列】- WEB API入门(一)

    这篇做为这个系列的第一篇,做基本的介绍,有经验的人可以直接跳到第二部分创建 ProductController.   创建 Web API 项目 在这里我们使用VS2013, .NET 4.5.1创建 ...

  3. 在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)

    1.是指servlet的版本,是2.5的还是3.0的 servlet3.0以后支持异步 2.dynamic web module和对应的TOMCAT 版本 http://blog.sina.com.c ...

  4. React 还是 Vue: 你应该选择哪一个Web前端框架?

    学还是要学的,用的多了,也就有更多的认识了,开发中遇到选择的时候也就简单起来了. 本文作者也做了总结: 如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue    如果你喜欢简单和“能用就行”的东西 ...

  5. Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

    在这篇文章中 概观 演习 概要 由网络营 下载网络营训练包 在传统的Web应用程序中,客户机(浏览器)通过请求页面启动与服务器的通信.然后,服务器处理请求,并将页面的HTML发送给客户端.在与页面的后 ...

  6. 从实体框架核心开始:构建一个ASP。NET Core应用程序与Web API和代码优先开发

    下载StudentApplication.Web.zip - 599.5 KB 下载StudentApplication.API.zip - 11.5 KB 介绍 在上一篇文章中,我们了解了实体框架的 ...

  7. Golang Web开发时前端出现谜之空白换行的坑

    在使用Golang做Web开发时,有时候渲染出来的模板在前台显示时会出现一些奇怪的空白换行,具体特征就是查看css样式表并没有相关定义的空白部分. 分析: 查看出现问题页面的网页源代码,复制空白换行部 ...

  8. 做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)

    做web项目时,常常会遇到改动了代码,但浏览器端没有生效,原因是多种多样的,我会依据我遇到的情况逐步更新解决的方法 1.执行的时候採用debug模式,普通情况下使用项目部署button右边那个butt ...

  9. 做web项目时对代码修改后浏览器端不生效的应对方法(持续更新)

    做web项目时,经常会遇到修改了代码,但浏览器端没有生效,原因是多种多样的,我会根据我遇到的情况逐步更新解决办法 1.运行的时候采用debug模式,一般情况下使用项目部署按钮右边那个按钮下的tomca ...

随机推荐

  1. 如何解决testng执行用例失败自动重跑问题

    注: 以下内容引自 http://blog.csdn.net/MenofGod/article/details/72846649 看过几个相关问题的帖子,内容类似,不过这篇解决问题的步骤和代码比较清晰 ...

  2. django(权限、认证)系统——User模型

    在Django的世界中,在权限管理中有内置的Authentication系统.用来管理帐户,组,和许可.还有基于cookie的用户session.这篇blog主要用来探讨这套内置的Authentica ...

  3. IDEA 格式化代码快捷键冲突解决

    转自https://blog.csdn.net/ckhmxhfhzt/article/details/72378537 大家都知道,在IDEA中格式化代码的快捷键为Ctrl+Alt+L .但是很多人发 ...

  4. forwardPort.go

    packagemain import(     "encoding/json"     "flag"     "fmt"     " ...

  5. BZOJ_2161_布娃娃_权值线段树

    BZOJ_2161_布娃娃_权值线段树 Description 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二 代考神,这和小时候培养的良好素质是 ...

  6. OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Redis使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  7. 经典Hash函数的实现

    Hash函数是指把一个大范围映射到一个小范围.把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存. 除此以外,Hash函数往往应用于查找上.所以,在考虑使用Hash函数之前,需要明白它 ...

  8. API 测试的具体实现

    目录 API 测试的具体实现 基于 Spring Boot 构建的 API 使用 cURL 命令行工具进行测试 使用图形界面工具 Postman 进行测试 如何应对复杂场景的 API 测试? 总结 A ...

  9. 【重学计算机】操作系统D3章:存储管理

    1. 存储管理的基本概念 逻辑地址:用户地址,从零开始编号 一维逻辑地址:(地址) 二维逻辑地址:(段号: 段内地址) 主存储器的复用方式 按分区:主存划分为多个固定/可变分区,一个程序占一个分区 按 ...

  10. Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照

    爬取背景 这套课程虽然叫爬虫入门类课程,但是里面涉及到的点是非常多,十分检验你的基础掌握的牢固程度,代码中的很多地方都是可以细细品味的. 为什么要写这么一个小东东呢,因为我生活在大河北,那雾霾醇厚的很 ...