coldfusion - 加快 QoQ 速度还是其他方法?

标签 coldfusion adobe railo

我正在构建一个应用程序,该应用程序执行具有多个连接的主查询。然后,整个应用程序可以使用该查询数据在全局变量中使用。查询在每次页面刷新时刷新或者获取最新的结果集;因此它仅在请求的生命周期内处于相同的状态。

在此应用程序的其他部分,我有时会对此数据运行数百个 QoQ - 通常是递归函数调用的结果。然而,虽然 QoQ 是一个很棒的功能,但它并不太快,有时页面加载在糟糕的一天可能会在 3000 - 5000 毫秒之间。只是速度不够快。

我可以采取任何类型的优化技术来使 QoQ 执行得更快,或者也许有替代方法?我读了 Ben Nadel 写的一篇关于 Duplicate() 函数的有趣文章 - 是否有使用该函数的范围?如果有,如何使用?

我很想听听你的想法。

不用担心疯狂的建议,这是一个个人项目,所以我愿意承担风险。我在与 CF8 兼容的 Railo 上运行它。

非常感谢, 迈克尔。

最佳答案

在没有看到 QoQ 的代码和复杂性的情况下,很难确定最好的方法,但是您可以做的一件事是使用结构来索引 QoQ 之外的记录。使用 QoQ 的大部分开销是构建新的查询对象,并且使用结构只写方法比循环原始查询并进行比较要高效得多。

例如:

<!--- build up index --->
<cfset structindex = {} />
<cfset fields = "first,last,company" />
<cfloop list="#fields#" index="field">
    <cfset key = "field:#field#,value:#q[field][currentrow]#" />
    <!--- initialize each key (instead of using stuctkeyexists) --->
    <cfloop query="q">
        <cfset structindex[key] = "" />
    </cfloop>
    <cfloop query="q">
        <!--- update each key with list of matching row indexes --->
        <cfset structindex[key] = listappend(structindex[key], currentrow) />
    </cfloop>
</cfloop>

<!--- save structindex to global variable --->

<!--- output rows matching index --->
<cfset key = "field:company,value:stackexchange" />
<cfoutput>
    <cfloop list="#structindex[key]#" index="row">
        #q.last[row]#, #q.first[row]# (#q.company[row]#)<br />
    </cfloop>
</cfoutput>

如果这不符合您的需求,请提供一些 QoQ 语句示例以及主查询中有多少条记录。

关于coldfusion - 加快 QoQ 速度还是其他方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5900550/

相关文章:

coldfusion - 列表 DeleteValue - 删除列表的一部分

oracle - 使用Oracle's “INSERT … RETURNING … INTO”语句的ColdFusion

vector - 如何将 illustrator 中的各个图层导出为 png?

apache - htaccess 重写规则不适用于以 .cfm 结尾的 URL

coldfusion - "Range:"http header 导致 ColdFusion 应用程序挂起

javascript - 循环遍历表并找到跨度类+选中确认框弹出的复选框。

coldfusion - 如何定义 cfspreadsheet 对象上的行数?

ios - 在 Unity iOS 中集成 Adob​​e Omniture

actionscript-3 - 告诉目标代码(转换为as3)

Railo 服务器将加号 (+) 转换为空格