我认为考虑到用户现在使用的设备数量以及每个设备的能力和限制,大多数网站应该朝着这个方向发展。
重要提示:
在阅读本文其余部分之前,请理解此概念是建立在基本的网络设计原则基础上的。为了为所有设备和情况设计单页应用程序,它不能仅作为单页应用程序运行。您必须构建一个基础,该基础将适用于具有高度有限功能的最基本浏览器,并根据其设备的能力增强用户体验。
这可能会给您带来更多工作量,但您将能够满足更广泛、多样化的受众,这比仅针对现代桌面或手机浏览器构建的 Web 应用程序更令人印象深刻。
减少加载时间和/或重量
单页应用程序更能够减少页面的加载时间和从服务器到客户端的数据传输量。
这种方法影响最大的一些功能包括:
- 一旦加载完成全局功能,就将其存储下来
- 允许更容易地在页面之间传输数据和更复杂的用户界面
- 在您只需要特定组件时,消除了后台提交后重新加载整个页面的成本
增加过度复杂化的可能性
这种设计方法可能会导致开发人员变得懒惰,并且会给最终用户带来更多干扰。 作为开发人员,请确保您的用户界面做好其工作(获取、显示并提交到服务器),并确保服务器做好其工作(提供、验证并提交到数据库)。大多数最终用户不会使用javascript文件中的信息来破坏您的系统,但是在我的意见中,包含有关数据结构的信息是在招惹麻烦。
从强大的架构开始!
与任何网页一样,可以将数据处理直接移动到服务处理程序中,而不是页面中,这可能导致一个利用以下层的体系结构:
- 数据库(数据存储)
- BL(数据处理和传输)
- 用户界面(数据显示和用户交互)
页面处理的服务
在我的看法中,使用服务是网站中组织良好、模块化代码的基本要求。回溯兼容网站中使用的标准获取和提交方法也可以使用这些服务来命中表示业务对象的服务,而不是命中页面。这使得您的代码能够在涉及相同对象的模块间更为通用。
然后更新单页应用程序变得简单,因为您可以初始化任何 UI 来使用 AJAX 方法拾取获取或提交方法并执行它们,而不是为事件导致后退提交,从而实现单个页面实例。
使用这些服务处理 UI 事件的副作用是,除了生命周期事件外,消除了代码后台文件中事件处理的需要。生命周期事件对于根据情况处理和修改相关数据以显示以及修改返回的 HTML 以减轻用户设备的负荷是有用的。
延迟加载!
任何复杂的网站都将具有复杂的模块和大量独特的组件。
使用单页应用程序带来的好处是,您可以选择将加载时间延迟到 Ajax 过程,并在您喜欢的任何应用程序部分(即首次尝试使用模块、初始页面加载后的闲置时间等)中这样做,从而使初始加载更快,处理时间更可控。
我的最佳实践清单
至于最佳实践...有相当多的优化可以和应该对设计进行,以使用这种方法,例如:
- 随着信息到来时存储信息,在不再相关时淘汰信息
- 仅在需要时通过 AJAX 加载脚本、HTML 和 JS 文件
- 如果可能的话,将在一个页面上加载的数据用于另一个页面,而不是为每个新“页面”重新加载
- UI 的极简数据结构,因为它是一种用于显示而非处理的手段。
不要过分关注UI上的验证,因为你的服务应该已经构建了对提交的所有信息进行验证的功能
这些优化对于加载时间、数据处理和对象关联都很有帮助。显然这不是一个完整的清单,但它是构建单页面应用程序的良好起点。
最后,我建议研究“为一网站设计”概念,以帮助建立坚实的基础。之后,其余的相对简单的增强就可以了。(提示:其中一种增强是捕获所有导致回发的操作,并使用这些信息构建异步调用)。
这方面有各种各样的信息,以及各种库可以使用,但我建议尽可能使用自己的代码来实现基本功能并且研究解决你问题的库代码而不是尝试实现具有通用库代码的复杂系统。使用他们的代码作为示例可能会导致更小的开销和更强大的代码,适合你特定的情况。
祝你好运!