微软昨天推出了IronPython for ASP.NET 的CTP版本。
由于目前的ASP.NET的扩展性模型采用的是CodeDOM模型,是针对静态编译的语言的。为解决这个问题,他们引入了一个新的扩展性模型,采用了ASP.NET的No-Compile特性,修改了System.Web.dll中的PageParserFilter API,通过几个基类(ScriptPage, ScriptUserControl, ScriptMaster)来参与页面的生命周期。这个新模型也为其他动态语言与ASP.NET协作指明了方向。新的模型好处多多,与静态语言比,除了页面初始处理快外,还提高了扩缩性,他们的加载测试标明,同样的硬件配置,一个拥有一万个静态编译的ASP.NET网页的一个网站已经不堪重负,却可以轻松处理一百万个动态编译的IronPython 网页!
想理解IronPython在ASP.NET下是如何工作的的话,读一下微软 .NET CLR 组架构师 David Ebbo 写的白皮书《ASP.NET之新动态语言扩展性模型(The New Dynamic Language Extensibility Model for ASP.NET)》,博客园的木野狐对该文做了中文摘要,值得一读。
可以在www.asp.net下载IronPython for ASP.NET:
Microsoft IronPython for ASP.NET CTP
http://www.microsoft.com/downloads/details.aspx?FamilyId=55932211-0D7E-4C6E-9B18-8F9D2AC1EE43&displaylang=en
相应的文档除了上面提到的白皮书外,还有涉及创建页面,创建用户控件,使用共享代码,数据绑定,以及如何调试等5个教程的文档:
IronPython for ASP.NET
http://www.asp.net/ironpython/
打印 | 张贴于 2006-11-04 02:30:00 | Tag:ASP.NET/IIS IronPython/IronRuby/F#
留言反馈
程序集中,以减少被加载的程序集数量。这的确有些帮助,但带来了非常高的复杂性。
这只是延迟了问题的解决。在某种情况下,asp.net 会卸载整个 application domain,并
重新启动一个来运行应用程序。但这是一个非常重量级操作,因为很多程序集要求在短
时间内被重新加载。
与之相反的是,新的模型完全不存在这个问题,因为它根本不产生程序集。当然,这样
处理页面会有一些额外的代价,但是垃圾回收器会回收这些占用的内存。
尽管动态代码通常会被编译为 IL, 这种编译和静态编译却是很不一样的。动态语言编译到
IL 采用的是公共语言运行时(common language runtime) 的一个特性,叫做轻量级代码生成
(lightweight code generation, LCG). 这个特性可以使得编译代码时占用的内存,会在不再
使用时被回收-- 不需要重启整个 application domain.
-------------------------------------------------------------------------------
主要是内存方面的问题,但是如果内存足够的话,静态的效率一定会高很多。
??
为什么动态编译会比静态的快?不大可能啊?!是不是搞反了?!动态的脚本运行效率是比编译语言的差很多的!