网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 网页素材 > AJAX代码 > 正文
探讨一种AJAX性能的改进方法
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: Admin 发布时间: 09/04/15

  一、 引言

  在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()的次数。

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
湘ICP备09003080号