欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > JS教程 >

讨论一种AJAX功能的改进方法

发表于2019-04-24 12:03| 次阅读| 来源网络整理| 作者session

摘要:讨论一种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()的次数。