ASP.NET MVC Razor视图与AngularJS的比较

7
我正在使用ASP.Net MVC和Razor语法来编写视图。但是在进行性能优化方面的一些研究后,我发现视图引擎需要花费时间将Razor代码编译为HTML。那么,在视图中使用AngularJS而不是Razor语法是否是一个好主意?如果这能提高性能,那么它的其他优缺点是什么?
谢谢。

可能是这个问题的重复。 - Prem
2个回答

6
哪种路线将提供更好的性能取决于几个因素。zambeb关于 mvc.net razor 视图的答案是不正确的。mvc.net 视图 在首次请求时进行编译,之后仅插入预编译视图中的数据。这比解析和渲染angular 视图 更少地使用处理器资源。然而,angular 视图位于客户端(浏览器)上进行渲染。如果由于某些原因您的服务器无法满足您的需求,则使用angular 建立的站点可以使您的站点性能更好。另一方面,如果两个站点都建立在足够大小的服务器上,一个 mvc.net 通常会有更快的呈现时间,因为浏览器的工作较少。当然,例外情况是,如果您正在构建一个需要通过视图而不是通过 DOM 操作或组件进行许多小 UI 更改的站点,则再次使用 angular 获胜。这就是为什么在使用 mvc.net 构建时,构建略大且更复杂的视图比 angular 更有意义,而不是必须如此。最终,每种方法都可能被滥用并且表现不佳。每种方法也都适用于特定类型的站点。这两种方法也可以结合使用。在 mvc.net 中,可以使用布局页将视图呈现为 HTML 片段。这意味着前端 angular 开发人员只需要关注静态视图和控制器,而 mvc.net 开发人员则关注服务器上的模型、动态视图和控制器。祝好运!

我认为你应该了解一下预编译视图的工作原理。它们经过高度优化。虽然你更新后的答案更好,但是每个请求都创建一个新的HTML文件的说法是错误的。这会误导人们对正在发生的事情产生错误的理解,并暗示了比实际情况更大的工作量。 - N-ate
我从Razor的第一个版本开始就一直在使用它,而且它仍然很好用。无论如何,客户端都会收到一个HTML。请澄清如果不是“某个地方”生成的话,客户端是如何获取这个HTML的。同时也请澄清它是在哪里生成的,我的回答中哪部分说了相反的话,以及哪里是推广性质的。我的最初帖子已经完全说明了这一点,编辑只是为了添加“预编译”提到的要点,但没有人讨论这个问题。请不要让人们感到困惑。 - zameb

0

Razor 是一种服务器端视图引擎。这意味着您所做的每个请求都将在服务器端进行处理,并生成一个新的 HTML 页面(从预编译视图中获取,正如 @N-ate 所添加的,但仍然是在服务器端完成)。就像在服务器上创建或读取 HTML 文件,然后通过响应发送给客户端。

另一方面,Angular 不需要生成新的 HTML 文件。它直接使用从服务器发送的数据,在客户端(浏览器)上直接生成视图。

这两种方法都可以,具体情况取决于您的需求。您更喜欢让服务器努力读取或创建 HTML 文件,还是让客户端来完成这项工作?

另一个要考虑的因素是 UI 设计师的工作流程。使用 Razor,您需要让设计师了解一些 Razor 语法,这在今天非常罕见。而使用 Angular,则可以期望找到更多了解此工作流程的人。

还有更多不同之处,但我认为考虑以上两点后,就可以做出决定了。


zameb,您的帖子是宣传性的,而且您对mvc.net中服务器执行的工作存在误解。您似乎认为它比angular中客户端执行的工作多,但事实并非如此。实际上,mvc.net中没有像angular中那样进行字符串解析处理。虽然由于工作发生的位置不同,您不应该比较这两个框架。 - N-ate
1
我喜欢这两种技术。事实上,当没有任何Angular相关的库/框架存在时,我更加开心。我的意图并不是为了推广任何东西。但在宇宙中没有什么是免费的。当10000个客户端访问服务器端的Razor引擎时,服务器端的工作量比10000个客户端少,但工作分布在所有客户端上。嗯,也许我还是错了。请随意将此移至聊天中。 - zameb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接