• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET 是如何让 aspx 完全编译的呢?

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我以前对这个问题一直持怀疑态度,因为.NET Framework里面就有很多TemplateControl处理类和方法挂上了Parse(或Parser)的字样,不过也有挂上Compile字样的。最近我确实测试了一次它是否完全编译:

我做了一个简单的纯asp页面:

<html>
  <head>
    <title>Now!</title>
  </head>
  <body>
    <div><%=DateTime.Now%></div>
  </body>
</html>

然后查看它的.dll,发现它自动生成了一个Page派生类,IRequiresSessionState也自动加上了,比普通的Page类多了一些双下划线开头的东西,例如两个双下划线开头的函数:
private void __BuildControlTree(Control __ctrl)
{
  __ctrl.SetRenderMethodDelegate(new RenderMethod(this.__Render__control1));
}

private void __Render__control1(HtmlTextWriter __output, Control parameterContainer)
{
  __output.Write("\r\n\r\n\r\n\r\n\r\n ");
  __output.Write(DateTime.Now);
  __output.Write("\r\n");
}

看来编译器会把html直接放到write的部分,中的逻辑再另外处理,例如Response.Write等效于等效于直接输出。至于它是怎么生成的,我还要研究研究才知道。另外这个功能不一定完全由CodeDom提供,可能CodeDom仅仅提供编译部分。Page类理论上是通过Parse来获取aspx里面的内容,然后把它们作为控件或者纯粹write出来的html添加到自己的内部,然而这时候得到的是一个对象的实例,不是一个类。假如由我设计ASP.NET,我会考虑是否存在可能性把一个实例转化为该类的派生类,或许ASP.NET真的是这样做的。

假如要把一个实例转化为一个类,这在Java或者.NET看来都并不难。例如在.NET里面,只需要把一个实例所包含的数据全部变为初始化数据放在类的初始化代码里面就行了,至于相关信息就放到meta-data里面,这个非常容易。如果.NET真的内置实现这种功能的东西,就一定要挖掘它出来。这意味着一种把逻辑缓存到dll的可能性,它拥有比缓存到内存更长久的保存性,同时因为它再次调用时无需再次编译所以这种缓存方式的效率也是绝对一流的。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET 嵌套Repeater[转收藏]发布时间:2022-07-10
下一篇:
使用asp.netmvc部分视图渲染html发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap