一、 引言
在Web表单中,我们使用AJAX来从客户端(通过JavaScript)调用服务端方法,而在AJAX内部则进行XMLHttpRequest调用。我测试了一些以不同方式实现的AJAX函数。另外,我还监控分析了进行AJAX调用的性能和生命周期。结果,我发现在Web表单中使用AJAX时存在一些严重的问题。不过,我也找到了这些问题的一种解决方法。在本文中,我正是想与各位分析这一问题及其相应的解决方案。
二、 在使用AJAX时所遇到的性能问题
对于每一个AJAX调用来说,我们都要创建包含AJAX方法的类的一个实例。另外,如果我们在类级上使用new关键字的话,我们还要为字段、属性及其它类级的变量创建实例。
三、 实现方案
我创建了一个工程,它包含两个Web表单:WebForm1.aspx和WebForm2.aspx,还有一个类Student.vb。这两部分code-behind页面都使用了一个AJAX函数getData()和一个Student类型的公共变量。借助于MXLogger类,我记录下每一个阶段的执行流程。
注意:Webform2.aspx的AJAX函数GetData()是共享的,而在WebForm1中,它不是共享的。
四、 测试应用程序
· 测试用例1:
运行webform1.aspx并且从JavaScript中调用getData() AJAX函数三次。
· 测试用例2:
运行webform2.aspx并且从JavaScript中调用getData()AJAX函数三次。
对于上面的测试用例,我得到如下的日志输出数据:
我们可以看到,在上面的日志输出数据中,对于测试用例1来说,我们能够看到更多的来自于Webform1和Student的构造器的日志数据。
五、 结论
我的建议是,在所有可能的地方,我们应该使用针对于AJAX的共享方法,以便它不会创建更多的Web表单实例和类级的字段。这样以来,我们就可以减少从GC中调用Finalize()的次数。
更多内容请看Ajax技术应用开发 Ajax技术专题专题,或进入讨论组讨论。
在Web表单中,我们使用AJAX来从客户端(通过JavaScript)调用服务端方法,而在AJAX内部则进行XMLHttpRequest调用。我测试了一些以不同方式实现的AJAX函数。另外,我还监控分析了进行AJAX调用的性能和生命周期。结果,我发现在Web表单中使用AJAX时存在一些严重的问题。不过,我也找到了这些问题的一种解决方法。在本文中,我正是想与各位分析这一问题及其相应的解决方案。
二、 在使用AJAX时所遇到的性能问题
对于每一个AJAX调用来说,我们都要创建包含AJAX方法的类的一个实例。另外,如果我们在类级上使用new关键字的话,我们还要为字段、属性及其它类级的变量创建实例。
三、 实现方案
我创建了一个工程,它包含两个Web表单:WebForm1.aspx和WebForm2.aspx,还有一个类Student.vb。这两部分code-behind页面都使用了一个AJAX函数getData()和一个Student类型的公共变量。借助于MXLogger类,我记录下每一个阶段的执行流程。
注意:Webform2.aspx的AJAX函数GetData()是共享的,而在WebForm1中,它不是共享的。
| 'Student.vb Public Class Student Sub New() MXLogger.AddLog("From Student.Constructor") End Sub Dim _Name As String Public Property Name() As String Get Return _Name End Get Set(ByVal Value As String) _Name = Value End Set End Property End Class 'WebForm1.aspx.vb Public Class WebForm1 Public Student As New Student Sub New() MXLogger.AddLog("From WebForm1.Constructor") End Sub <Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)> _ Public Function getData() As String MXLogger.AddLog("From WebForm1.Ajax.getData()") Return "I m a Non Shared Function" End Function End Class 'WebForm2.aspx.vb Public Class WebForm2 Public Student As New Student Sub New() MXLogger.AddLog("From WebForm2.Constructor") End Sub <Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)> _ Public Shared Function getData() As String MXLogger.AddLog("From WebForm2.Ajax.getData()") Return "I m a Shared Function" End Function End Class |
四、 测试应用程序
· 测试用例1:
运行webform1.aspx并且从JavaScript中调用getData() AJAX函数三次。
· 测试用例2:
运行webform2.aspx并且从JavaScript中调用getData()AJAX函数三次。
对于上面的测试用例,我得到如下的日志输出数据:
| //请注意,为了解释之目的,我在其中手工加入了一些日志行 LOG for the Test Case 1: ( Non Ajax Shared Function ) -------While Loading The Page-------- 5/9/2006 10:37:29 AM>>From Student.Constructor 5/9/2006 10:37:29 AM>>From WebForm1.Constructor 5/9/2006 10:37:29 AM>>From WebForm1.Ajax.getData() -------First Call For GetData()-------- 5/9/2006 10:37:29 AM>>From Student.Constructor 5/9/2006 10:37:29 AM>>From WebForm1.Constructor 5/9/2006 10:37:29 AM>>From WebForm1.Ajax.getData() -------Second Call For GetData()-------- 5/9/2006 10:37:29 AM>>From Student.Constructor 5/9/2006 10:37:29 AM>>From WebForm1.Constructor 5/9/2006 10:37:29 AM>>From WebForm1.Ajax.getData() -------Third Call For GetData()-------- 5/9/2006 10:37:30 AM>>From Student.Constructor 5/9/2006 10:37:30 AM>>From WebForm1.Constructor 5/9/2006 10:37:30 AM>>From WebForm1.Ajax.getData() LOG for the Test Case 2: ( Shared Ajax Function ) -------While Loading The Page-------- 5/9/2006 10:37:09 AM>>From Student.Constructor 5/9/2006 10:37:09 AM>>From WebForm2.Constructor 5/9/2006 10:37:09 AM>>From WebForm2.Ajax.getData() -------First Call For GetData()-------- 5/9/2006 10:38:11 AM>>From WebForm2.Ajax.getData() -------Second Call For GetData()-------- 5/9/2006 10:38:11 AM>>From WebForm2.Ajax.getData() -------Third Call For GetData()-------- 5/9/2006 10:38:11 AM>>From WebForm2.Ajax.getData() |
我们可以看到,在上面的日志输出数据中,对于测试用例1来说,我们能够看到更多的来自于Webform1和Student的构造器的日志数据。
五、 结论
我的建议是,在所有可能的地方,我们应该使用针对于AJAX的共享方法,以便它不会创建更多的Web表单实例和类级的字段。这样以来,我们就可以减少从GC中调用Finalize()的次数。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
·Ajax程序设计入门(1) (3507次浏览)
·JavaScript实现AJAX的拖动效果 (2938次浏览)
·Ajax基础教程(1) (504次浏览)
·掌握AJAX之AJAX通讯技术简介 (493次浏览)
·Ajax:拥抱JSON,让XML走开 (474次浏览)
·ASP.NET Ajax调用WCF服务的代码示例 (36次浏览)
·AJAX开发过程中的七宗罪 (32次浏览)
·最流行的AJAX框架 (29次浏览)
·Ajax工具和技术综述 (21次浏览)
·在BEA WEBLOGIC PORTAL中进行AJAX编程,第1部 (13次浏览)
·JavaScript实现AJAX的拖动效果 (2938次浏览)
·Ajax基础教程(1) (504次浏览)
·掌握AJAX之AJAX通讯技术简介 (493次浏览)
·Ajax:拥抱JSON,让XML走开 (474次浏览)
·ASP.NET Ajax调用WCF服务的代码示例 (36次浏览)
·AJAX开发过程中的七宗罪 (32次浏览)
·最流行的AJAX框架 (29次浏览)
·Ajax工具和技术综述 (21次浏览)
·在BEA WEBLOGIC PORTAL中进行AJAX编程,第1部 (13次浏览)
·ASP.NET Futures 的Ajax应用开发 10-31
·ASP.NET AJAX之内部揭秘(1) 10-31
·ASP.NET AJAX入门之Timer控件简单使用 10-31
·ASP.NET AJAX 学习指南 10-31
·ASP.NET AJAX 拖放功能6种实现方法总结 10-31
·ASP.NET AJAX 的JSON 10-31
·ASP.NET AJAX Client Library: 更繁?更简? 10-31
·ASP.NET AJAX 1.0 发布 10-31
·Ajax之后下一个最热门的网络技术是什么? 10-31
·AJAX在移动领域威胁到Java ME了么? 10-31
·ASP.NET AJAX之内部揭秘(1) 10-31
·ASP.NET AJAX入门之Timer控件简单使用 10-31
·ASP.NET AJAX 学习指南 10-31
·ASP.NET AJAX 拖放功能6种实现方法总结 10-31
·ASP.NET AJAX 的JSON 10-31
·ASP.NET AJAX Client Library: 更繁?更简? 10-31
·ASP.NET AJAX 1.0 发布 10-31
·Ajax之后下一个最热门的网络技术是什么? 10-31
·AJAX在移动领域威胁到Java ME了么? 10-31
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容



