2012-05-10 38 views
19

我曾经使用MVC 3 Razor引擎来渲染页面。有时我不得不使用AJAX调用来传送Razor呈现的HTML并使用JQuery将其插入到页面中。随着新项目的启动,我们确实考虑使用MVC 4单页应用程序框架,这对我们来说是新的。我第一眼看着它,这让我感慨万分: 一方面它意味着所有数据都通过JSON传输,而客户端完成所有工作来呈现它们并编码一些非常适合服务器的与UI相关的逻辑,网络性能。另一方面,客户端(HTML + JavaScript)变得更加沉重,因为它里面有一堆魔术字符串和隐藏的关系,这似乎很难维护。我们已经习惯了VS intellisense,类型安全的.NET服务器代码来呈现我们必须交换客户端脚本的页面,以及SPA中的Knockout绑定语句。基于剃刀的MVC与MVC中的单页面应用4

我不知道有什么使用SPA与剃刀相比的缺点和缺点,除了这里我提到的这个明显的一个吗?谢谢

+2

错误的选择。您可以在SPA中使用剃须刀。也许不是那么多。 –

+3

我们将首次使用Razor页面加载而不需要数据,所有其他请求都将在Ajax + JSON的帮助下完成,MS SPA并不意味着使用Razor来加载数据 – YMC

+4

“prons”。大声笑,我认为这应该是“利弊”的新替代词。 – Dan

回答

4

我认为这听起来像你已经很好地了解了这里的大部分折衷;您将减少SPA的网络负载,并将处理措施转移到客户端。但是,您会增加代码的复杂性,并且使系统的维护变得稍微困难​​一些(仅仅是因为复杂性增加 - 不是由于SPA固有的任何架构问题)。

要记住的另一件事是兼容性。我在你的问题的评论中提到了一个“错误选择”的原因是,为了让JavaScript禁用的人们可以使用该站点,你仍然需要提供定期的整页视图。这对于SEO来说也是一个好主意;抓取工具将以JS禁用的用户身份浏览您的网站,然后为您的网站编制索引。然后,该站点应该正确处理这些传入的URL,以便那些启用了JS的用户将在SPA中发现自己正在查看相同的内容(而不是不必要地倾倒在“无JS”视图中)。

还有其他一些我会提到的可能性,可能有助于上述,但它打破了SPA的理想;也就是说,在某些地方使用Ajax加载的partials而不是JSON数据。例如,假设您在网站上有一个典型的“联系电子邮件”表单;你希望在SPA的上下文中加载,但通过AJAX加载部分可能会更容易。 (当然,是的;你可以用描述要在电子邮件表单中显示的字段的JSON对象来实现)。

也可能有内容比“数据”更“内容”,您可能仍希望通过partials和Ajax加载内容。


一个SPA绝对是一个有趣的项目,我即将自己部署一个项目。我已经在其中使用了JSON和partials的组合,但这可能不是您自己的选择。

+1

我没有看到网络负载的减少。如果您加载50条记录,则无论它是预先加载还是根据需要加载都无关紧要。音量是相同的。好处是跨越较长时间的负载。这转向更多按需方式。 –

+14

@ChuckConway通过JSON加载50条记录绝对不是加载一个包含格式化,布局和其他标记*加* 50记录的HTML页面的网络传输。 –

+2

如果您正在刷新整个页面。是的,你是对的。如果您只通过JSON加载,则不是。 –

17

Razor是一种基于服务器的技术,其中SPA(单页应用程序)是客户端(Web浏览器)上使用的体系结构方法。两者都可以一起使用。

从高层次,SPA将渲染和数据检索移动到客户端。 Web服务器成为坐在数据库前面的服务层。使用SPA时,MVC模式效果最佳。 Knockout.js和Backbone.js等框架可用于此目的。最终结果是像经验丰富的响应式桌面。

要达到这个目标,您需要成为一名下降的javascript程序员或愿意学习javascript。

是的,它将业务需求从C#转移到JavaScript。在Visual Studio中,JavaScript的智能感受有限。要对你的javascript有信心,你需要依靠单元测试。积极的一面是丰富的用户体验(想想Gmail或谷歌地图)。