Улучшить время отклика CFHTTP

У меня есть API, который входит в учетную запись, а затем выполняет поиск товаров, на которые я хочу сделать ставку, с помощью запроса CFHTTP следующим образом.

Поиск.cfm:

<cfinclude template="logMeIn.cfm" />

<cfhttp url="https://utas.fut.ea.com/ut/game/fifa14/transfermarket?maxb=1800000&start=0&num=16&type=player&maskedDefId=158023" method="POST" result="Get">
    <cfhttpparam type="header" name="Cache-Control" value="no-cache" />
    <cfhttpparam type="header" name="Host" value="utas.fut.ea.com" />
    <cfhttpparam type="header" name="Referer" value="http://cdn.easf.www.easports.com/soccer/static/flash/futFifaUltimateTeamPlugin/FifaUltimateTeam.swf" />
    <cfhttpparam type="header" name="X-HTTP-Method-Override" value="GET" />
    <cfhttpparam type="header" name="X-UT-PHISHING-TOKEN" value="#ListLast(Session.searchAccount40PhishingKey,'=')#" />
    <cfhttpparam type="header" name="X-UT-SID" value="#Session.searchAccount40SessionKey#" />
</cfhttp>

logMeIn.cfm:

<cfscript>
    Variables.email = "[email protected]";
    Variables.password = "password";
    Variables.secretAnswer = "secretAnswer";
    Session.searchAccountGamertag = "WirierJupiter11";
    Variables.doReload = 0;
    Variables.deviceView = "device=not_mobile";
</cfscript>

<cfhttp url="http://www.easports.com/uk/fifa/football-club/ultimate-team" method="GET" result="stage1" redirect="false">
    <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
    <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
    <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
    <cfhttpparam type="header" name="Connection" value="keep-alive" />
    <cfhttpparam type="header" name="Host" value="www.easports.com" />
    <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
</cfhttp>

<cfif StructKeyExists(Stage1.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage2URL = Stage1.ResponseHeader['Location'];
        Variables.returnedCookies = Stage1.ResponseHeader['Set-Cookie'];
        Variables.easfcWebSessionStr = Variables.returnedCookies[1];
        Variables.easfcWebSession = ListFirst(Variables.easfcWebSessionStr,";");
        Variables.hlStr = Variables.returnedCookies[2];
        Variables.hl = ListFirst(Variables.hlStr,";");
        Variables.xsrfTokenStr = Variables.returnedCookies[3];
        Variables.xsrfToken = ListFirst(Variables.xsrfTokenStr,";");
    </cfscript>
    <cfhttp url="#Variables.stage2URL#" method="GET" result="Stage2" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Host" value="accounts.ea.com" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage2") AND StructKeyExists(Stage2.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage3URL = Stage2.ResponseHeader['Location'];
    </cfscript>
    <cfhttp url="#Variables.stage3URL#" method="GET" result="Stage3" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Host" value="signin.ea.com" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage3") AND StructKeyExists(Stage3.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage4URL = Stage3.ResponseHeader['Location'];
        Variables.jSessionStr = Stage3.ResponseHeader['Set-Cookie'];
        Variables.jSession = ListFirst(Variables.jSessionStr,";");
    </cfscript>

    <cfhttp url="#Variables.stage4URL#" method="GET" result="Stage4" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="#Variables.jSession#" />
        <cfhttpparam type="header" name="Host" value="signin.ea.com" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>

    <cfscript>
        Variables.bodyContent = "email=#Variables.email#&password=#Variables.password#&_rememberMe=on&rememberMe=on&_eventId=submit&facebookAuth=";
        Variables.contentLength = Len(Variables.bodyContent);
    </cfscript>

    <cfhttp url="#Variables.stage4URL#" method="POST" result="Stage5" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Cache-Control" value="no-cache" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Content-Length" value="#Variables.contentLength#" />
        <cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded" />
        <cfhttpparam type="header" name="Cookie" value="#Variables.jSession#" />
        <cfhttpparam type="header" name="Host" value="signin.ea.com" />
        <cfhttpparam type="header" name="Referer" value="#Variables.stage4URL#" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
        <cfhttpparam type="body" value="#Variables.bodyContent#" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage5") AND StructKeyExists(Stage5.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage6URL = Stage5.ResponseHeader['Location'];
        Variables.returnedCookies = Stage5.ResponseHeader['Set-Cookie'];
        Variables.webunStr = Variables.returnedCookies[3];
        Variables.webun = ListFirst(Variables.webunStr,";");
        Variables.isPogoStr = Variables.returnedCookies[4];
        Variables.isPogo = ListFirst(Variables.isPogoStr,";");
    </cfscript>
    <cfhttp url="#Variables.stage6URL#" method="GET" result="Stage6" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Cache-Control" value="no-cache" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="s_sivo=US%3AORIGIN%3ANONE; s_cc=true; s_ria=flash%2010%7Csilverlight%202.9; s_pv=NA%3AUS%3ASTORE%3ANONE%3ASTORE%3ANONE%3AORIGIN%3ANONE%3ALOGIN; s_nr1=1379427845791-NEW; s_sq=%5B%5BB%5D%5D; __utma=103303007.1129861060.1379427834.1379427834.1379427834.1; __utmb=103303007.1.10.1379427834; __utmc=103303007; __utmz=103303007.1379427834.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); s_ppv=85">
        <cfhttpparam type="header" name="Host" value="accounts.ea.com" />
        <cfhttpparam type="header" name="Referer" value="#Variables.stage4URL#" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage6") AND StructKeyExists(Stage6.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage7URL = Stage6.ResponseHeader['Location'];
        Variables.returnedCookies = Stage6.ResponseHeader['Set-Cookie'];
        Variables.sidStr = Variables.returnedCookies[1];
        Variables.sid = ListFirst(Variables.sidStr,";");
        Variables.remidStr = Variables.returnedCookies[2];
        Variables.remid = ListFirst(Variables.remidStr,";");
        Variables.cookieStr = Variables.easfcWebSession & "; " & Variables.hl & "; " & Variables.xsrfToken;
    </cfscript>
    <cfhttp url="#Variables.stage7URL#" method="GET" result="Stage7" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Cache-Control" value="no-cache" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="#Variables.cookieStr#" />
        <cfhttpparam type="header" name="Host" value="www.easports.com" />
        <cfhttpparam type="header" name="Pragma" value="no-cache" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage7") AND StructKeyExists(Stage7.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage8URL = Stage7.ResponseHeader['Location'];
        Variables.easfcWebSessionStr = Stage7.ResponseHeader['Set-Cookie'];
        Variables.easfcWebSession = ListFirst(Variables.easfcWebSessionStr,";");
        Variables.cookieStr = Variables.easfcWebSession & "; " & Variables.hl & "; " & Variables.xsrfToken;
    </cfscript>
    <cfhttp url="#Variables.stage8URL#" method="GET" result="Stage8" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Cache-Control" value="no-cache" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="#Variables.cookieStr#" />
        <cfhttpparam type="header" name="Host" value="www.easports.com" />
        <cfhttpparam type="header" name="Pragma" value="no-cache" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage8") AND StructKeyExists(Stage8.ResponseHeader,"Set-Cookie")>
    <cfscript>
        Variables.stage9URL = "http://www.easports.com/iframe/fut/?locale=en_GB&baseShowoffUrl=http%3A%2F%2Fwww.easports.com%2Fuk%2Ffifa%2Ffootball-club%2Fultimate-team%2Fshow-off&guest_app_uri=http%3A%2F%2Fwww.easports.com%2Fuk%2Ffifa%2Ffootball-club%2Fultimate-team";
        Variables.returnedCookies = Stage8.ResponseHeader['Set-Cookie'];
        Variables.deviceView = ListFirst(Variables.returnedCookies,";");
        Variables.cookieStr = Variables.cookieStr & "; " & Variables.deviceView;
    </cfscript>
    <cfhttp url="#Variables.stage9URL#" method="GET" result="Stage9" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="#Variables.cookieStr#" />
        <cfhttpparam type="header" name="Host" value="www.easports.com" />
        <cfhttpparam type="header" name="Referer" value="http://www.easports.com/uk/fifa/football-club/ultimate-team" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage9") AND StructKeyExists(Stage9.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage10URL = Stage9.ResponseHeader['Location'];
        Variables.futWebStr = Stage9.ResponseHeader['Set-Cookie'];
        Variables.futWeb = ListFirst(Variables.futWebStr,";");
        Variables.cookieStr = Variables.remid & "; " & Variables.sid;
    </cfscript>
    <cfhttp url="#Variables.stage10URL#" method="GET" result="Stage10" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="#Variables.cookieStr#" />
        <cfhttpparam type="header" name="Host" value="accounts.ea.com" />
        <cfhttpparam type="header" name="Referer" value="http://www.easports.com/uk/fifa/football-club/ultimate-team" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage10") AND StructKeyExists(Stage10.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage11URL = Stage10.ResponseHeader['Location'];
        Variables.sidStr = Stage10.ResponseHeader['Set-Cookie'];
        Variables.sid = ListFirst(Variables.sidStr,";");
        Variables.cookieStr = Variables.futWeb & "; " & Variables.easfcWebSession & "; " & Variables.hl & "; " & Variables.xsrfToken & "; " & Variables.deviceView;
    </cfscript>
    <cfhttp url="#Variables.stage11URL#" method="GET" result="Stage11" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="#Variables.cookieStr#" />
        <cfhttpparam type="header" name="Host" value="www.easports.com" />
        <cfhttpparam type="header" name="Referer" value="http://www.easports.com/fifa/football-club/ultimate-team" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"Stage11") AND StructKeyExists(Stage11.ResponseHeader,"Location")>
    <cfscript>
        Variables.stage12URL = Stage11.ResponseHeader['Location'];
        Variables.futWebStr = Stage11.ResponseHeader['Set-Cookie'];
        Variables.futWeb = ListFirst(Variables.futWebStr,";");
        Session.searchAccountCookie = Variables.futWeb & "; " & Variables.easfcWebSession & "; " & Variables.hl & "; " & Variables.xsrfToken & "; " & Variables.deviceView;
    </cfscript>
    <cfhttp url="#Variables.stage12URL#" method="GET" result="Stage12" redirect="false">
        <cfhttpparam type="header" name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Cookie" value="#Session.searchAccountCookie#" />
        <cfhttpparam type="header" name="Host" value="www.easports.com" />
        <cfhttpparam type="header" name="Referer" value="http://www.easports.com/fifa/football-club/ultimate-team" />
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Session,"searchAccountCookie")>
    <cfscript>
        Variables.data = '{ "isReadOnly": false, "sku": "FUT14WEB", "clientVersion": 1, "nuc": 1000215983198, "nucleusPersonaId": 948682854"nucleusPersonaDisplayName": "WirierJupiter11", "nucleusPersonaPlatform": "360", "locale": "en-GB", "method": "authcode", "priorityLevel":4, "identification": { "authCode": "" } }';
        Variables.dataLength = Len(Variables.data);
    </cfscript>
    <cfhttp url="http://www.easports.com/iframe/fut/p/ut/auth" method="POST" result="sessionIDRequest">
        <cfhttpparam type="header" name="Accept" value="application/json, text/javascript" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Content-Length" value="#Variables.dataLength#" />
        <cfhttpparam type="header" name="Content-Type" value="application/json" />
        <cfhttpparam type="header" name="Cookie" value="#Session.searchAccountCookie#" />
        <cfhttpparam type="header" name="Easw-Session-Data-Nucleus-ID" value="1000215983198" />
        <cfhttpparam type="header" name="Host" value="www.easports.com" />
        <cfhttpparam type="header" name="Pragma" value="no-cache" />
        <cfhttpparam type="header" name="Referer" value=" http://www.easports.com/iframe/fut/?baseShowoffUrl=http%3A%2F%2Fwww.easports.com%2Fuk%2Ffifa%2Ffootball-club%2Fultimate-team%2Fshow-off&guest_app_uri=http%3A%2F%2Fwww.easports.com%2Fuk%2Ffifa%2Ffootball-club%2Fultimate-team&locale=en_GB">
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />   
        <cfhttpparam type="header" name="X-UT-Embed-Error" value="true" />
        <cfhttpparam type="header" name="X-UT-Route" value="https://utas.fut.ea.com:443" />
        <cfhttpparam type="header" name="X-Requested-With" value="XMLHttpRequest" />
        <cfhttpparam type="body" value="#Variables.data#" />
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"sessionIDRequest") AND Variables.sessionIDRequest.FileContent NEQ "Connection Failure" AND Variables.sessionIDRequest.StatusCode NEQ "500 Internal Server Error">
    <cfscript>
        Variables.sessionKeyRequest = REReplace(Variables.sessionIDRequest.FileContent, "^\s*[[:word:]]*\s*\(\s*","");
        Variables.sessionKeyRequest = REReplace(Variables.sessionKeyRequest, "\s*\)\s*$", "");
        Variables.sessionInfo = DeserializeJSON(Variables.sessionKeyRequest);
        Session.searchAccountSessionKey = Variables.sessionInfo.sid;
    </cfscript>
    <cfhttp url="http://www.easports.com/iframe/fut/p/ut/game/fifa14/phishing/validate" method="POST" result="phishingKeyRequest">
        <cfhttpparam type="header" name="Accept" value="application/json" />
        <cfhttpparam type="header" name="Accept-Language" value="en-US, en;q=0.5" />
        <cfhttpparam type="header" name="Connection" value="keep-alive" />
        <cfhttpparam type="header" name="Content-Length" value="39" />
        <cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded" />
        <cfhttpparam type="header" name="Cookie" value="#Session.searchAccountCookie#" />
        <cfhttpparam type="header" name="Easw-Session-Data-Nucleus-ID" value="1000215983198" />
        <cfhttpparam type="header" name="Host" value="www.easports.com" />
        <cfhttpparam type="header" name="Pragma" value="no-cache" />
        <cfhttpparam type="header" name="Referer" value="http://www.easports.com/iframe/fut/?baseShowoffUrl=http%3A%2F%2Fwww.easports.com%2Fuk%2Ffifa%2Ffootball-club%2Fultimate-team%2Fshow-off&guest_app_uri=http%3A%2F%2Fwww.easports.com%2Fuk%2Ffifa%2Ffootball-club%2Fultimate-team&locale=en_GB">
        <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
        <cfhttpparam type="header" name="X-UT-Embed-Error" value="true" />
        <cfhttpparam type="header" name="X-UT-Route" value="https://utas.fut.ea.com:443" />
        <cfhttpparam type="header" name="X-Requested-With" value="XMLHttpRequest" />
        <cfhttpparam type="header" name="X-UT-SID" value="#Session.searchAccountSessionKey#" />
        <cfhttpparam type="formField" name="answer" value="#Variables.secretAnswer#">
    </cfhttp>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<cfif StructKeyExists(Variables,"phishingKeyRequest") AND StructKeyExists(Variables.phishingKeyRequest.ResponseHeader,"Set-Cookie")>    
    <cfscript>
        Variables.returnedCookies = phishingKeyRequest.ResponseHeader["Set-Cookie"];
        Session.searchAccountPhishingKey = ListFirst(Variables.returnedCookies,";");
        if (StructKeyExists(Variables,"easfcWebSession")) {
            Variables.cookieStr = Variables.easfcWebSession & "; " & Variables.hl & "; " & Variables.xsrfToken & "; device=not_mobile; " & Session.searchAccountPhishingKey;
            Session.searchAccountLoggedIn = 1;
            Session.searchAccountLoginAttempts = 0;
        } else {
            Variables.doReload = 1;
        }
    </cfscript>
<cfelse>
    <cfset Variables.doReload = 1 />
</cfif>

<!--- IF RELOAD PAGE FLAG SET TO TRUE RELOAD --->
<cfif Variables.doReload EQ 1>

    <!--- RELOAD PAGE --->
    <script>
        location.reload();
    </script>

</cfif>

Проблема, с которой я сталкиваюсь, заключается в том, что для возврата ответа поиска требуется несколько сотен миллисекунд, и это приводит к тому, что я пропускаю довольно много элементов (поскольку существуют API-интерфейсы, которые возвращают эти данные быстрее).

Можно ли как-то увеличить время, необходимое для получения ответа? Есть ли что-то, что я могу изменить в своем коде, или альтернативную функцию CFHTTP, которую я мог бы использовать? Или есть еще какой-то язык, такой как Ruby, Python или C#, на котором я мог бы лучше написать API, который может выполнять такие функции быстрее, поскольку в конце концов скорость является наиболее важным фактором.

Заранее большое спасибо за любой совет.


person CPB07    schedule 21.12.2013    source источник
comment
Разве вы не можете получить свой логин только с одним запросом?   -  person Dan Bracuk    schedule 21.12.2013
comment
@DanBracuk К сожалению, нет, хотя на моей реальной странице search.cfm нет входа для входа, я просто включил его в пример кода, чтобы вы поняли, где устанавливается пара заголовков http. Логин обрабатывается в другом месте. Единственное, что на самом деле делается на странице search.cfm, — это поисковый запрос cfhttp, который я хочу оптимизировать.   -  person CPB07    schedule 21.12.2013


Ответы (1)


CFHTTP откроет соединение, сделает запрос, а затем закроет соединение. Ваш logMeIn.cfm делает 14 HTTP-запросов, если я правильно понимаю. Настройка каждого соединения требует значительных временных затрат.

Я думаю, что у вас есть два варианта:

Войти заранее

Можно ли периодически запускать logMeIn.cfm либо в потоке, либо с помощью планировщика CF и сохранять значение searchAccount40SessionKey в области приложения? ваш код может сделать запрос и посмотреть, хорош ли идентификатор сеанса. Если да, то оставь. Если нет, пройдите процесс входа в систему. Если ваш сайт поддерживает много пользователей, возможно, это не масштабируемый подход. Если это для небольшого количества людей, это может сработать

Используйте другую библиотеку HTTP.

CF поставляется с HTTPClient (думаю, скачаю сейчас, чтобы проверить). У него есть возможность управлять соединением. Таким образом, вы сможете поддерживать одно соединение для всех запросов. Это будет означать переписывание большей части вашего кода, но вы должны увидеть значительное увеличение скорости. Вы также можете немного упростить ситуацию, поскольку HTTPClient может частично управлять файлами cookie/заголовком местоположения и последующими переадресациями.

Взгляните на этот ответ: Понимание постоянных HTTP-соединений в ColdFusion

Если вы еще этого не сделали, проксируйте свои запросы через Fiddler, чтобы вы могли видеть, как взаимодействует клиент/сервер. Чтобы использовать Fiddler, установите его, запустите, а затем измените вызовы CFHTTP, чтобы использовать proxyServer=localhost и proxyPort=8888. Затем вы увидите HTTP-вызовы в списке по мере их совершения. Это бесценно в такой работе. Это также позволит вам перетащить запрос на вкладку композитора, немного отредактировать его, а затем повторно отправить, что может быть намного быстрее, чем переписывать код, просто чтобы попробовать что-то.

Обновлять

@CPB07 добавил немного больше подробностей в комментарии. Идентификатор сеанса уже кэширован и хранится в сеансе, что означает, что первое предложение уже реализовано. другая часть информации заключается в том, что search.cfm вызывается каждые 335 мс, и это то, что нуждается в оптимизации. Учитывая это, лучшее улучшение, которое я могу придумать, — переключить вызов CFHTTP в search.cfm на использование HTTPClient. CF10 поставляется с последней версией HTTPClient HTTPComponents, поэтому код, указанный в разделе 2.3 эта страница должна быть примерно тем, что вам нужно. В примере в разделе 2.3.1 используется HTTPContext, который имеет метод getCookieStore(), который имеет метод addCookie(), который позволит вам установить файл cookie сеанса и использовать его в каждом запросе. Грубо говоря, все, что находится за пределами блока try в этом коде, может быть запущено один раз, а объекты сохранены в сеансе, тогда фактическое открытие запроса/соединения может выполняться каждый раз.

Еще одна вещь, на которую стоит обратить внимание, это то, как вы выполняете код в первую очередь. Вы сказали, что не знакомы с потоками, что, я думаю, означает, что вы используете планировщик или AJAX для опроса. Вы, вероятно, получите более последовательные результаты, запустив код опроса в потоке, но это немного усложнит задачу.

Обновление 2

Используя Fiddler для доступа к URL-адресу в search.cfm, просмотрев вкладку статистики, вы увидите два ключевых числа:

  • TCP/IP-подключение: 5 мс
  • Рукопожатие HTTPS: 186 мс

Если вы оставите соединение открытым, вы сможете сэкономить это количество времени в среднем на запрос. Keep-alive держит соединение открытым только для определенного количества запросов, поэтому вам нужно периодически повторно подключаться, но, учитывая, что вы делаете запросы каждые 335 мс, затраты времени на соединение ~ 200 мс кажутся высокими. Запрашивает ли браузер search1.cfm каждые 335 мс? Если это так, вы платите двойной штраф, поскольку браузер подключается к вашему серверу, а затем подключается к внешнему серверу.

person barnyr    schedule 21.12.2013
comment
Спасибо за ответ. LogMeIn на самом деле не выполняется на странице search.cfm, он обрабатывается отдельно, а сеанс поддерживается в другом месте (поскольку существует порог 3RPS), поэтому все, что на самом деле делается на странице Search.cfm, — это запрос CFHTTP для получения результаты, а затем весь код, относящийся к тому, что делать с возвращенными результатами. У меня нет опыта работы с потоками, поэтому я не уверен, что это будет лучший/быстрый метод, поскольку я вызываю файл Search.cfm каждые 335 мс, и для каждой учетной записи поиска есть файл Search.cfm (Search1.cfm, Search2.cfm и т. д.)? - person CPB07; 22.12.2013
comment
Кончилось место...! Таким образом, logMeIn.cfm уже вызывается в другом месте приложения перед выполнением поиска, поэтому только этот единственный запрос CFHTTP ищет элементы, которые я хочу оптимизировать. Этот вид оптимизации является новым для меня, поэтому я не уверен, есть ли в CFAdministrator настройки, на которые я должен обратить внимание, которые могут ускорить процесс? Также с точки зрения проксирования моих запросов через Fiddler, не могли бы вы объяснить простым языком, что вы имеете в виду, пожалуйста? У меня установлен Fiddler, но я не очень хорошо с ним знаком. Спасибо. - person CPB07; 22.12.2013
comment
Рад, что вы уже кэшируете детали сеанса! Это самый большой прирост скорости, который вы получите! Я обновлю свой ответ, чтобы отразить дальнейшие возможные улучшения - person barnyr; 22.12.2013
comment
Еще раз спасибо за подробный ответ, просто фантастика. Однако я когда-либо работал только с тегами CF, поэтому как мне реализовать метод HTTPClient? Я предполагаю, что это все еще делается в файле .cfm? С точки зрения это пример, не могли бы вы привести пример того, как преобразовать поисковый запрос CFHTTP в структуру, необходимую для использования этого метода? Кроме того, как бы я назвал этот метод? - person CPB07; 23.12.2013
comment
Можно ли получить ваш твиттер или что-то еще, чтобы немного поковыряться в этом, пожалуйста? - person CPB07; 07.01.2014
comment
Конечно, я @Barnyrelph. Я собирался рассмотреть ваш вопрос подробнее, но тут случилось Рождество. Не стесняйтесь кричать мне. - person barnyr; 07.01.2014
comment
Спасибо, я начал следить за вами. Я полагаю, что вопрос, который я задаю, заключается в том, как я могу улучшить время отклика от http-запроса? Изменение моей функции для использования вызова httpclient может помочь получить более быстрый ответ или это что-то, что выходит за рамки моего приложения? - person CPB07; 09.01.2014
comment
Да, браузер запрашивает search1 каждые 335 мс. Есть ли обходной путь для двойного наказания, от которого я страдаю? - person CPB07; 10.03.2014