当前位置: 首页 > 面试题库 >

为什么需要单页应用程序?

田德馨
2023-03-14
问题内容

该单页应用(SPA)已经到了我们。随之而来的还有很多新功能,例如路由,客户端页面生命周期,MVC模式,MVVM模式,MV
*模式等等。还有一些Javascript模式,例如AMD模式,Singleton,Facade,..

还开发了许多SPA框架和库。我们可以在互联网上找到它的一些内容。它们是AngularJs,Reactjs,BackboneJs,DurandalJs

等等,以及许多第三方组件,例如RequireJs,Amplifyjs,BreezeJs等等使Javascript编码更加容易。

但是我只是想为什么我们需要SPA?因为它被视为在开发Web应用程序时引入了一些新的复杂事物。尽管有SPA,我们仍可以使用传统的Web应用程序,每个请求每个加载页面。我只是看到一个好处,就像我们可以轻松地在移动设备上运行它并适应新的Web应用程序开发趋势一样。有人可以更清楚地解释一下吗?

还有一件事情,如果我们使用大量的第三方组件来组成一个SPA。那么,此Web应用程序是否具有一致性?我认为在Web应用程序内部维护大量组件应该很复杂。您如何看待?

欢迎所有建议。


问题答案:

我认为这是大多数网站在考虑当今用户使用的设备数量以及每个设备的功能和局限性时应该朝的方向。

重要:

在阅读其余内容之前,请理解该概念是建立在Web设计基本原理的基础上的。为了为所有设备和情况设计一个单页面应用程序,不能将它作为一个单页面应用程序专门运行。您必须建立一个基础,使其能够在功能极为有限的最基本的浏览器上运行,并根据用户设备的功能来增强用户的体验。

这可能会给您带来更多的工作,但是您将能够满足更多,更多样化的受众的需求,这比将专门为现代台式机或手机浏览器构建的Web应用程序组合在一起要给人留下深刻的印象。

减少装载时间和/或重量

单页应用程序更有能力减少页面的加载时间以及从服务器到客户端的数据传输量。

此方法影响最大的一些功能包括:

  • 首次加载后存储所有全局功能
  • 使页面之间的数据传输更加轻松,并且用户界面更加复杂
  • 仅需要特定组件时,消除了回发后加载整个页面的成本

过度复杂化的机会增加

这种设计方法可能会使开发人员懒惰并受到最终用户的更多干扰。
作为开发人员,请确保您的UI完成其工作(获取,显示并提交给服务器),并确保服务器完成其工作(提供,验证并提交给数据库)。大多数最终用户不会尝试使用javascript文件中的信息来破坏您的系统,但是在我看来,包括有关您的数据结构的信息会带来麻烦。

从强大的体系结构开始!

与任何网页一样, 数据处理可以直接移到服务处理程序中,而不是页面中 ,这可能导致利用以下层的体系结构:

  • 数据库(数据存储)
  • BL(数据处理和传输)
  • 用户界面(数据显示和用户交互)

页面处理服务

我认为 使用服务几乎 是网站中组织和调制代码 的要求
。向后兼容网站中使用的标准获取和发布方法也可以使用这些服务来命中代表业务对象而不是页面的服务。
这使您的代码可以在涉及相同对象的模块之间更加通用。

然后,对单个页面应用程序的更新变得非常简单,因为您可以初始化任何UI来获取get或post方法,并使用AJAX方法执行它们,而不是对事件(即单个页面实例)进行回发。

使用这些服务来处理UI事件的副作用是,除了生命周期事件外,您无需在文件后面的代码中进行事件处理。生命周期事件对于处理和修改相关数据以根据情况进行显示以及修改返回的html减轻用户设备的负担非常有用。

延迟加载!

任何复杂的网站都将带有复杂的模块和大量独特的组件。

使用单页应用程序所获得的好处是,您可以选择将加载时间推迟到ajax进程中,并且可以在应用程序的任何部分都希望这样做(例如,第一次尝试使用模块,初始后的空载时间)页面加载等),从而使初始加载速度更快,并且处理时间更受控制。

我的最佳做法清单

至于最佳做法,。可以并且应该对打算使用这种方法的设计进行 很多 优化,例如:

  • 随时存储信息,不再相关时将其删除
  • 仅在需要时通过ajax加载脚本,html和js文件
  • 如果可以的话,使用在另一页上加载的数据,而不是为每个新的“页面”重新加载
  • UI的极简数据结构,因为它是一种显示而不是处理的手段。
  • 不要沉迷于UI上的验证,因为您的服务应该已经过构建,可以验证提交给它的任何信息

这些优化有助于加载时间,数据处理和对象关联。显然,这不是一个完整的列表,但是,这是构建单页应用程序的一个很好的开端。

最后,我建议研究 为一个网站设计的
概念,以帮助建立坚实的基础。之后,剩下的就是相对简单的增强功能。(提示:这些增强功能之一是捕获导致回发的所有操作,并使用该信息来构建异步调用)。

关于这方面有各种各样的信息以及要使用的各种各样的库, 但是我建议尽可能使用您自己的代码来实现基本功能,进入解决您的问题并进行一些研究
而不是 研究的库代码 试图用通用库代码实现一个复杂的系统。以他们的代码为例可以针对您的特定情况减少开销,并提高代码强度。

祝好运!



 类似资料:
  • 所以我写了一个小应用程序,为了熟悉基础知识,我使它尽可能简单。我用Config.java文件做了一个简单的mvc应用程序,当我认为现在应用程序应该抛出一个错误时,它实际上是有效的。 这是我的pom.xml 我的配置文件只有一个视图解析器: 主文件 最后是控制器类:package com。实例演示。控制器; 一个pplication.properties 这就是整个应用程序,我记得我需要。xml或使

  • 问题内容: 我正在尝试了解如何在Spring应用程序中使用JBoss EAP6。我有一个示例OpenShift应用程序,它包含一个文件。 我找到了有关此文件的一些文档,但是我不清楚为什么以及何时应该在Spring应用程序中使用这些文件。内容如下: 为什么需要声明对模块的依赖关系?JBoss范例中的模块是什么?没有这个xml文件是否可以生存? 问题答案: 只要您的应用程序没有任何类加载问题,就不需要

  • 我试着去理解Spring是怎么跟所有的事情联系在一起的。然而,我不明白为什么在单元测试spring代码时使用mockito?spring不能处理与mockito相同的DI吗?莫基托贡献了什么是纯泉所不可能做到的? 澄清:我的想法是,我可以使用一个不同的应用程序上下文来进行测试,在这里创建我需要的存根bean作为虚拟对象。

  • 以我的拙见,关于“什么是单子”这个著名问题的答案,尤其是投票最多的答案,试图解释什么是单子,而没有明确解释为什么单子是真正必要的。它们能被解释为一个问题的解决方案吗?

  • 我正在学习Spring框架,但我不能理解注释的确切含义以及应该对哪些类进行注释。在Spring Boot文档中,说应用程序类应该是class。 Spring Boot支持基于Java的配置。虽然可以使用XML源调用SpringApplication.run(),但我们通常建议您的主要源是@Configuration类。 在尝试了解时,我发现用注释类表明Spring IoC容器可以使用该类作为bea

  • 问题内容: 这适用于Applet,Servlet,Midlet等的子类。 为什么他们不需要?如果我想创建一个从或类似的类开始,那是不好的设计,还是我将如何去做? 问题答案: 它实际上是好的设计,但并不明显,您想要执行的操作没有效果,因此有点反常。 这些类型的应用程序生活在容器中,因此,它们的切入点由这些容器必须遵守的标准确定。这些标准的设计者选择不将入口点称为主要入口点。您可以将功能放在重写的方法