【原文地址】ASP.NET AJAX Beta 1 Released
【转载地址】http://blog.joycode.com/scottgu/archive/2006/10/21/85482.aspx
【原文发表日期】 Friday, October 20, 2006 6:46 AM
上个月,我宣布了Atlas的新官方名称以及讨论了这个完全支持的,基于ASP.NET 2.0 和 Visual Studio 2005 之上的1.0 版本的免费产品的发布计划。
今天,我非常高兴地宣布推出微软ASP.NET AJAX 1.0 版本的第一个Beta 。你现在可以在http://ajax.asp.net网站上下载这个版本。在该网站上,有以下三个下载选项:
1) The ASP.NET AJAX 1.0 版 “核心”下载。这个下载包括了为微软产品支持(Microsoft Product Support)完全支持的所有特性,即拥有标准的10年微软支持许可(一天24小时,一周7天,一年365天)。该下载包括了核心AJAX类型系统,网络协议层(networking stack),组件模型,扩展件(extender)基类,以及与ASP.NET集成的服务器端功能(包括广受欢迎ScriptManager,UpdatePanel,和 Timer控件)。
2) ASP.NET AJAX “增值”CTP下载。这个下载包括了以前各个Atlas CTP版本包含的,但并不在完全支持的“核心”1.0 版本内的额外的高级特性。在我们进一步完善这些特性,融合更多的反馈的同时,这些特性将继续得到社区支持。随着时间的推移,随着我们对这个增值包里的特性做进一步确认后,我们会陆续把特性移到“核心”下载版本里去。
3) ASP.NET AJAX 控件工具包。这个项目包含了基于ASP.NET AJAX 1.0 版“核心”下载版本的28个非常酷的免费AJAX控件。这个项目是协作性的共享源码,是由微软和非微软开发人员共同开发的,你今天就可以去CodePlex加入开发社区或下载代码。
Beta版本里做的一些变动
在这个Beta版本里,开发组做了不少变动。几个比较大的变动如下:
性能和下载文件大小的优化
以前的ASP.NET AJAX CTP版本依赖于浏览器下载一个包含所有特性的大JavaScript文件到浏览器上。对这个Beta版本,我们花了很多时间把特性抽取成多个文件,(这样,除非你要使用某些特性,否则你不需要下载它们),对整个库的下载大小做了优化。 ASP.NET AJAX “核心”下载现在只包括2个支持它的所有特性的JavaScript库:
a) MicrosoftAjax.js.gz脚本文件,包含了核心的JavaScript类型系统(type system),组件/控件模型,JSON网络协议和持久层(networking/serialization stack),应用服务特性(用户信息+认证),目前其大小为14.8k。
b) MicrosoftAjaxWebForms.js.gz脚本文件,添加了对使用UpdatePanel情形和页面局部更新的支持,其大小为6.4k。
在访问一个网站时,这些文件只被浏览器下载一次,然后它们就会被缓存在客户端,在访问该站其他的页面以及以后返回来再访问该网站时,这些文件就会被重用。这些新的文件大小可以确保在你第一次访问一个网站时给你一个既爽又快的体验。
除了优化JavaScript脚本库的初始下载文件大小外,我们也花了时间优化客户端JavaScript回调到服务器的网络传输数据的大小(network traffic size)。在默认情形下,象UpdatePanel和UpdateProgress这样的控件,以及控件工具包里的控件不再 发送 xml-script ,而是发送1-2行的JavaScript脚本,有助于极大地减小线上网络传输数据的大小。
在核心类型系统里,我们也从使用基于JavaScript closure的类转而使用基于prototype定义的类,因为我们发现对大多数常见的应用情形来说,这会减小内存的使用。
Safari 浏览器支持
以前的ASP.NET AJAX CTP 版本对Safari的支持不太好,譬如,UpdatePanel根本不工作。在这个Beta版本里,我们把Safari加入了完全测试过,完全支持的浏览器行列中。我们正在努力添加对Opera的支持,虽然在这个版本里,我们还没有准备宣称对它的支持,请静候更新消息。
显著改进的调试支持
随便哪个花过大量时间调试的人都可以作证,调试JavaScript经常不太好玩。我们在这个Beta版里做了2个重大的变动,有望极大地改进调试微软AJAX库的体验:
1) 把我们的JavaScript类定义从基于closure的模型转到了基于prototype的模型,你现在可以使用现有的Visual Studio 2005 脚本调试器(或者现有的其他JavaScript脚本调试器)查看和单步调试JavaScript 对象。以前Closure的方法掩藏了很多可以查看的信息。
2) 我们花费很多时间建立了一个自动的 JavaScript 生成环境(automated JavaScript build environmen),它允许我们为所有的JavaScript文件生成2个版本:一个优化了性能和下载大小的发布版本(retail version),和一个内含完整监测代码的调试版本(debug version),后者将有助于你在开发过程中找到代码中的问题。脚本文件的调试版本中的每个函数现在包含了对参数的验证编码,会在运行前核实传给函数的参数的正确性,假如参数有问题,就会报告出错并且提供运行栈(stack trace)信息。这有助于尽早轻松定位你的 JavaScript 编码的错误所在,有望极大地改进JavaScript调试。
注意事项:在默认情形下,究竟是使用AJAX 脚本库的发布版本还是调试版本是由你的web.config文件中的<compilation debug=”true|false” />设置来决定的。因为这客户端的参数验证编码会显著增加客户端脚本库的大小,而且对性能有极大影响,在部署你的应用前,确认你设置了debug=”false”。想了解为什么在部署ASP.NET 应用时,你应该始终设置debug=”false”的原因,请参考我以前写的这篇帖子。
另一个注意事项:我们的计划是,让Visual Studio的下一个版本使用与运行时我们在调试脚本中使用的同样的参数验证元数据,在IDE里驱动IntelliSense和对JavaScript的句法检查。你可以把这元数据添加到你的代码中以改进验证,错误检查,以及最终也能给你自己的JavaScript 库提供IntelliSense功能。
UpdatePanel的改进
在这个Beta版本中,为融入客户的反馈,我们对 UpdatePanel 控件做了显著的改动。除了添加对 Safari 浏览器的支持外,这个Beta版本中的UpdatePanel 控件现在对以下几个方面提供支持:
a) 客户端脚本事件钩子(event hook),让你编写客户端 JavaScript 更轻松地参与脚本回调。
b) 能够让UpdatePanel中的控件触发页面局部更新的postback以及普通的postback ,这样你可以根据应用场景来做选择。你也可以禁止 UpdatePanel 中的子控件触发任何postback。
c) 能够在UpdatePanel控件中使用ASP.NET 验证和向导(Wizard)控件。以前的版本中有些bug防碍了这些控件的使用。
d) 能够动态生成和添加UpdatePanel 控件到页面中,而不用静态定义它们。这对控件开发人员尤其有用,因为他们现在能够在他们的复合控件里生成和使用UpdatePanel控件了。
e) 能够在一个页面里拥有多个 UpdateProgress 和动画效果控件,这些控件可以根据当前正在进行回调的那个UpdatePanel 有条件地运行。
f) 能够用声明的方式指定一个UpdateProgress控件应该等待多久才显示。这允许你对快速的UpdatePanel回调免于显示进度状况。
g) 在使用UpdatePanel情形下,对屏幕阅读器和其他accessibility工具的支持,以更好地实现Section 508标准。
Beta版重要注意事项:该Beta版中的UpdateProgress控件目前发布在“增值”下载中,所以你要用它的话,需要将其添加到你网站去。在下一个Beta版更新中,它将会被移到“核心”下载中,成为完全支持的应用情形。
客户端脚本库的许多改进
我们融合了客户的许多反馈,清理,简化,和改进了许多客户端JavaScript脚本库API。除了从closure模型转成prototype模型外,我们做了许多其他的API清理性变动,包括:
a) 简化了的JavaScript事件模型。现在,在客户端定义和attach事件更加容易。同时,对象事件也是按需才生成,以减少启动时间和所需内存(working set)的大小。
b) 简化了的组件,行为,和控件类型。现在,不用先生成相应对象,就可以调用有关的API,添加了按需(on-demand) semantics 以提高性能。
c) 改进了的客户端网络层。默认的回调函数和方法名semantics 提供了更加容易的方式以进行常见的异步回调。
d) 成员和用户信息(Profile) APIs。现在,在客户端JavaScript脚本中与成员和用户信息API交互的APIs更简单。
与其他AJAX库更好的兼容性
使用JavaScript的一个挑战是,不同的客户端 JavaScript 库间的冲突非常丑陋。以前的ASP.NET AJAX CTP版本中定义了一个名叫 $( ) 的辅助性函数,与其他常用的JavaScript 库(包括Prototype 和Scriptaculus)有冲突。
在这个Beta版本中,我们把我们的 $() 函数重新命名为 $get( ) ,同时还做了另外一些命名上的变动来允许多个独立的AJAX库在同一个页面上和平共处。
源码修改许可
我们收到的一个常见的请求是,开发人员要求能对微软AJAX 核心JavaScript库的源码做改动,譬如添加一个小的功能,微调一个实现,或者做个战术性的bug fix等。
我们将提供一个许可,明确地允许客户对这些库做改动,这个Beta中的ScriptManager API 现在允许你对内置的JavaScript库提供另外的实现或使用改动过的版本。除了允许你改动库代码为你所用外,这个许可也授予你再发布(redistribution)的权利,这样你可以把它们与你自己的组件和扩展一起发布。但对你再发布你自己的版本的一个要求是,你需要改变其中的命名空间以防冲突。
我们认为,完全的企业级支持(十年的支持服务)和修改代码再发布的权利之组合,真是强劲无比的offering,将提供给开发人员成堆的灵活性,无论他们项目的类型,大小和目标用户是什么。
下步计划
你也许从上面的段落里注意到了,这个Beta版有许多新的特性和变动。你需要对现有的ASP.NET AJAX编码做更新来反映这些变化。
如果你一直在用服务器端的 ASP.NET AJAX 特性,那么你会发现这些更新是比较直截了当的。这些更新主要包括,把控件的前缀从 <atlas:> 重新命名为 <asp:> ,改变UpdatePanel 控件的触发句法( trigger syntax),对控件工具包里的扩展件(extender)控件的声明方式做些小的句法变动。你可以在这里读一下移植向导以了解其中的操作细节。
如果你创建了你自己的JavaScript类型的话,或者你与组件模型直接交互的话,那么你需要做比较大的改动。在更新样本例子时,我们发现JavaScript的变动本身并不很复杂,但让人感觉沮丧的是,JavaScript无类型的灵活性阻碍了工具的编译检查,强迫你迭代地更新编码,反复寻找和改正每个变动,这有点枯燥和恼人。为帮你从CTP版移植到这个Beta版,ASP.NET AJAX开发组发布了一篇详细的文档,其中列出了所有的变动,还包括了编码例子示范常见模式和API用例的之前和之后版本。我们不久将在这里发布这个文档。
ASP.NET AJAX 开发组也将在以后的几周内对论坛进行紧密的监视,帮助大家解决移植问题以及发现的任何问题。如果你遇上任何问题,发现了任何bug,或者需要任何帮助的话,请在论坛里发贴求助。
我们真的期待有很多人使用这个Beta 版本和希望得到更多的反馈。我们相信,与目前在ASP.NET AJAX v1.0 核心下载里的所有特性相对应的API的定义应该非常接近最后版本了,我们计划在今年剩下的时间里,不停地接受反馈和bug报告,稳定和锁定版本的特性。我们计划在几个星期后发布一个beta 更新版,融入客户的反馈,之后就发布一个RC版,然后在大家感觉一切就绪时就正式发布完全支持的1.0版本。
谢谢,
Scott
发表于 2006年10月21日 9:14