我曾经使用MVC3Razor引擎来渲染页面。有时我不得不使用AJAX调用来传输Razor呈现的HTML,并使用JQuery将其插入到页面中。随着新项目的启动,我们确实考虑使用对我们来说是新的MVC 4单页面应用程序框架。我第一眼看到它,感觉很复杂:一方面,它意味着你所有的数据都是通过JSON传输的,客户端做了所有的工作来呈现它们,并编码一些与UI相关的逻辑,这对服务器和网络性能很好。另一方面,客户端(HTML+JavaScript)变得更加繁重,里面有一堆神奇的字符串和隐藏的关系,这似乎很难维护。我们已经习惯了VS智能感知,输入安全的.NET服务器代码来呈现页面,在SPA的情况下,我们必须将这些页面交换为客户端脚本和Knockout绑定语句。
我想知道与Razor相比,使用SPA有什么利弊,除了我在这里提到的这个显而易见的利弊?谢谢
发布于 2012-05-10 23:53:04
Razor是一种基于服务器的技术,其中SPA (单页应用程序)是在客户端(web浏览器)上使用的架构方法。两者都可以一起使用。
从高层次上讲,SPA将渲染和数据检索转移到客户端。web服务器成为数据库前面的服务层。MVC模式在使用SPA时效果最好。像Knockout.js和Backbone.js这样的框架可以用来做这件事。最终的结果是丰富的、响应式的桌面体验。
要做到这一点,你需要成为一个下降的javascript程序员,或者愿意学习javascript。
是的,它正在将业务需求从C#转移到javascript中。在Visual Studio中,javascript的智能意义是有限的。要对你的javascript有信心,你需要依靠单元测试。好的一面是丰富的用户体验(想想gmail或google地图)。
发布于 2012-05-10 23:12:59
我认为听起来您已经很好地了解了这里的大多数权衡;您将使用SPA减少网络负载,并将处理过程的一部分转移到客户端。然而,您将增加代码的复杂性,并使其更难轻松地维护系统(仅仅是因为增加了复杂性-而不是由于SPA中固有的任何体系结构问题)。
另一件需要牢记的事情是兼容性。我在对你的问题的评论中提到了一个“错误的选择”的原因是,为了保持网站对禁用了Javascript的人可用,你仍然需要提供常规的、整页的视图。为了SEO,这也是一个好主意;爬虫将以禁用JS的用户的身份浏览您的站点,然后可以索引您的站点。然后,站点应该正确处理这些传入的URL,这样那些启用了JS的站点将发现自己在您的SPA中查看相同的内容(而不是不必要地被转储到"no JS“视图中)。
我还将提到一些其他可能对上述情况有帮助的东西,但它打破了SPA的理想;即在某些地方使用Ajax加载的部分数据,而不是JSON数据。例如,假设您在站点上有一个典型的"Contact EMail“表单;您希望在SPA的上下文中加载该表单,但是通过AJAX加载部分表单可能更容易。(当然可以,您可以使用一个JSON对象来描述要在电子邮件表单中显示的字段)。
也可能会有比“数据”更多的“内容”,您可能仍然希望通过部分和Ajax加载这些内容。
SPA绝对是一个有趣的项目,我即将自己部署一个。我在其中混合使用了JSON和partials,但这可能不是您自己的选择。
https://stackoverflow.com/questions/10526454
复制相似问题