Search code examples
vbscriptasp-classicxmlhttprequesttiming

Classic ASP XMLHttp Send very slow


I've inherited a classic asp project and as part of the upgrade process we're moving a lot of the business logic to a REST API (WebApi 2.2)

The authorization endpoint for the api is written, and the asp site can call it, but it's very slow compared with calling directly via Postman.

(I'm a C# coder not a VBScript one so the below code may be offensive)

Asp Code:

' 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

You can see there's some profiling code in there.

The following post request takes 392ms

POST localhost:5000/oauth/token
Content-Type application/x-www-form-urlencoded

client_id:ABCDEF0-ABCD-ABCD-ABCD-ABCDEF-ABCDEF01234
client_secret:aBcDeF0123456789aBcDeF0123456789=
username:demo
password:demo
grant_type:password

If I issue the same request direct to the Api via Postman it takes 30ms.

That's more than 13x slower.

What gives?

Edit

Raw result from Softwing Profiler:

flJson          10.9583865754112    
flSendRequest   392.282022557137    

Solution

  • So after a lengthy-ish discussion with the @J-Tolley it looks as though the issue is with the Softwing.Profiler documentation which states;

    all results are given in milliseconds

    even though earlier in the page it states;

    has a ten milliseconds resolution

    Have not used the Softwing.Profiler component alone before and would recommend anyone using in a Classic ASP environment to implement it using the SlTiming class library provided by 4GuysFromRolla.

    In that article it even warns anyone using the Softwing.Profiler ProfileStop() method to;

    Be aware that Softwing.Profiler's ProfileStop method returns a value in ticks (tenths of milliseconds).