You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CF函数出现超时错误,是否有更高效的改写方式?

CF函数执行超时的高效改写方案

我有一个CF函数执行时出现超时错误,该函数运行在包含其他业务逻辑的页面中,请问有没有更高效的改写方式?

<cffunction name="GetTheSerialNumber" access="remote" returnformat="plain" returntype="string" output="no">
    <cfargument name="term" required="yes" />

    <cfsetting requesttimeout="20"/>
    <cfif NOT IsDefined("session.LoggedIn")>
        <cfabort />
    </cfif>

    <cfquery name="GetSerialNumber" datasource="#application.datasource#">
        SELECT [serialNum]
            ,MissionAsset.MissionAssetID
            ,MissionAssetDescription
            ,ESN.EfracusSerialNumberID
        FROM MissionAsset        
            LEFT JOIN EfracusSerialNumber ESN ON MissionAsset.MissionAssetID = ESN.MissionAssetID
        WHERE MissionAsset.isActive = <cfqueryparam value="1" cfsqltype="cf_sql_bit"> 
            AND serialNum LIKE <cfqueryparam value="%#arguments.term#%" cfsqltype="cf_sql_varchar"> 
            AND MissionAssetStatusID IN (2,3,4,5,6)
        ORDER BY serialNum
    </cfquery>

    <cfset stcReturn = '['>

    <cfloop query="GetSerialNumber">
        <cfset stcReturn &= '{"label":"#GetSerialNumber.serialNum#", "value":"#GetSerialNumber.serialNum#", "missionAssetID": "#GetSerialNumber.MissionAssetID#", "missionAssetDescription": "#GetSerialNumber.MissionAssetDescription#", "ID" : "#GetSerialNumber.EfracusSerialNumberID#"}'>
        <cfif GetSerialNumber.CurrentRow NEQ GetSerialNumber.RecordCount>
            <cfset stcReturn &= ",">
        <cfelse>
            <cfset stcReturn &= "]">
        </cfif>
    </cfloop>

    <cfreturn stcReturn>
</cffunction> 

更新说明:我采纳了部分建议,在不修改前端代码的前提下优化了该函数,以下是优化后的版本,感谢各位!

<cffunction name="GetTheSerialNumber" access="remote" returnformat="plain" returntype="string" output="no">
    <cfargument name="term" required="yes">

    <cfsetting requesttimeout="20"/>
    <cfif NOT IsDefined("session.LoggedIn")>
        <cfabort />
    </cfif>
    
    <cfquery name="GetSerialNumber" datasource="#application.datasource#">
        SELECT [serialNum] as LabelValue, MissionAsset.MissionAssetID as MAID, MissionAssetDescription as MAD, ESN.EfracusSerialNumberID as ESNID
        FROM MissionAsset        
            LEFT JOIN EfracusSerialNumber ESN ON MissionAsset.MissionAssetID = ESN.MissionAssetID
        WHERE MissionAsset.isActive = <cfqueryparam cfsqltype="cf_sql_bit" value="1"> 
            AND serialNum LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#arguments.term#%"> 
            AND MissionAssetStatusID IN (2,3,4,5,6)
        ORDER BY LabelValue
    </cfquery>

    <cfset stcReturn = '['>
    <cfloop query="GetSerialNumber" >
        <cfset stcReturn &= '{"label":"#LabelValue#", "value":"#LabelValue#", "missionAssetID": "#MAID#", "missionAssetDescription": "#MAD#", "ID" : "#ESNID#"}'>
        <cfif GetSerialNumber.CurrentRow NEQ GetSerialNumber.RecordCount>
            <cfset stcReturn &= ",">
        </cfif>
    </cfloop>
    <cfset stcReturn &= ']'>

    <cfreturn stcReturn>
</cffunction>    

内容的提问来源于stack exchange,提问作者FSUKXAZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:56:09