Vbscript 经典的ASP XMLHttp发送速度非常慢
我继承了一个经典的asp项目,作为升级过程的一部分,我们将许多业务逻辑转移到RESTAPI(WebApi 2.2)上 api的授权端点是编写的,asp站点可以调用它,但是与通过Postman直接调用相比,它的速度非常慢 (我是一名C#编码员,不是VBScript编码员,因此下面的代码可能令人反感) Asp代码:Vbscript 经典的ASP XMLHttp发送速度非常慢,vbscript,asp-classic,xmlhttprequest,timing,Vbscript,Asp Classic,Xmlhttprequest,Timing,我继承了一个经典的asp项目,作为升级过程的一部分,我们将许多业务逻辑转移到RESTAPI(WebApi 2.2)上 api的授权端点是编写的,asp站点可以调用它,但是与通过Postman直接调用相比,它的速度非常慢 (我是一名C#编码员,不是VBScript编码员,因此下面的代码可能令人反感) Asp代码: ' Send a prebuilt HTTP request and handle the response ' Returns true if the request returns
' Send a prebuilt HTTP request and handle the response
' Returns true if the request returns a 200 response, False otherwise
' Response body is placed in Response
' ErrorMessage is set to return status text if an error code is returned
Function HandleRequest(ByRef objRequest, strBody)
set profiler = Server.CreateObject("Softwing.Profiler")
HandleRequest = False
' Add auth token if we have it
If Not m_accessToken&"" = "" Then
objRequest.SetRequestHeader "Authorization", "Bearer " & m_accessToken
End If
' Originating IP for proxy forwarding
If Not m_clientIp&"" = "" Then
objRequest.SetRequestHeader "X-Forwarded-For", m_clientIp
End If
On Error Resume Next
If (strBody&"" = "") Then
objRequest.Send()
Else
profiler.ProfileStart()
objRequest.Send(strBody)
flSendRequest = profiler.ProfileStop()
End If
If Err.Number = 0 Then
Dim jsonResponse
If (objRequest.ResponseText&"" <> "") Then
profiler.ProfileStart()
set jsonResponse = JSON.parse(objRequest.ResponseText)
flJson = profiler.ProfileStop()
set m_Response = jsonResponse
End If
If objRequest.Status = 200 Then
HandleRequest = True
m_errorMessage = ""
Else
m_errorMessage = objRequest.statusText
End If
Else
m_errorMessage = "Unable to connect to Api server"
End If
On Error GoTo 0
End Function
如果我通过邮递员直接向Api发出相同的请求,则需要30毫秒
这比13倍还要慢
有什么好处
编辑
来自Softwing Profiler的原始结果:
flJson 10.9583865754112
flSendRequest 392.282022557137
所以,在一段时间后,问题似乎在于哪个州
所有结果以毫秒为单位
即使它在页面的前面陈述
分辨率为10毫秒
以前没有单独使用过Softwing.Profiler
组件,建议在经典ASP环境中使用的任何人使用提供的实现它
它甚至警告任何使用Softwing.Profiler
ProfileStop()
方法的人
请注意,Softwing.Profiler的ProfileStop
方法返回一个以滴答(十分之一毫秒)为单位的值
您是每次都从同一台机器发出请求,还是ASP代码驻留在与Postman不同的地方?要使其成为有效的测试,您需要从同一位置运行这两个测试。还请记住,COM探查器将为代码执行增加少量开销。还怀疑这是所有的ASP代码运行时,你调用ASP页。同一台机器。一切都在本地完成。我还认为会有一个探查器开销,但这似乎太多了。(首先运行探查器的原因是正常运行时速度明显不同)您是否有
Softwing.profiler
中针对objRequest.Send(strBody)
部件的原始计时?我以前没有使用过原始档案器,我一直使用它包装了一个名为的库,它允许你更多地控制时间和生成摘要。在上面的编辑中添加了它们。我停顿了一会儿,因为SlTiming库说Softwing的计时是十分之一毫秒(所以我可能忘了除以10)。但是他们说计时是ms。所以澄清一下,SlTiming
是正确的,但是Softwing.Profiler
是错误的。如果使用.ProfileStop()
请记住返回的值是以滴答(十分之一毫秒)为单位的。很高兴我能帮忙。