我想了解Razor引擎如何执行以@
开头的c#代码的顺序。
我试图查看执行Controller并执行视图的不同时间。所以,我创建了这个非常简单的ASP.NET MVC应用程序。我将时间存储在Controller中的ViewBag
变量中,并将其显示为View,我还在视图中显示当前时间。
控制器有这个:
public ActionResult Index()
{
ViewBag.ProcessingTime = DateTime.Now;
return View();
}
视图有这个:
Processing time: @ViewBag.ProcessingTime<br />
@{
int i = 0;
do
{
i++;
<text>@i<br /></text>
}
while (i < 1000000);
}
Render time: @DateTime.Now
结果是这样的:
Processing time: 03/03/2012 04:16:48 p.m.
1
2
3
4
[...]
999998
999999
1000000
Render time: 03/03/2012 04:16:48 p.m.
为什么当它在Controller中执行if
ProcessingTime并且视图中的RenderTime相同时,显然需要花时间向我显示网页?
答案 0 :(得分:4)
请记住,该页面在服务器上呈现 。所以,即使它在视觉上对你而言在客户端上显得非常缓慢(因为你发送了一个巨大的HTML),实际渲染发生在服务器上,这可能在不到一秒的时间内发生,因为你所做的就是循环超过100万元素。
尝试显示处理器滴答,你应该注意到一个区别(如果你不这样做,必须有一些根本性的错误):
Processing time: @ViewBag.ProcessingTime.Ticks
... your loops and stuff
Render time: @DateTime.Now.Ticks
所以实际执行如下:
/home/index
。