首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >coldfusion cfc性能

coldfusion cfc性能
EN

Stack Overflow用户
提问于 2012-03-28 03:49:19
回答 3查看 1.1K关注 0票数 1

我们将分层数据引入到Coldfusion应用程序中,并将其解析为多个it。所讨论的CFC存储其子组件的数组,这些子组件也是同一类型组件的实例。解析其中的一些数据可能会导致在完成时必须创建100个或更多(最多可能是300个)的of……

有时,创建所有这些CFCs可能只需要50-75ms,有时需要1000-1250ms。(我编写了一个脚本,循环并创建和存储这些对象,使用GetTickCount()跟踪速度。)我知道服务器负载可能与此有很大关系,但我想知道是否有一些方法可以提高创建这些对象的性能?

(第一场战斗是在一个DB调用中获取这些对象的所有数据,这是我们能够做到的,但现在它一直在运行,我们发现实例化大量这些of可能也是一个瓶颈。)

EN

回答 3

Stack Overflow用户

发布于 2012-03-28 08:07:17

您可以做的最有效的事情就是不在每次请求时重新创建对象。你如何去做取决于特定的用例。如果你没有处理大量的唯一对象,有一件事可能对你有用,那就是在应用程序作用域中有一个缓存结构,它以"#tablename#--#primarykey#“为关键字。当你要创建一个对象时,首先检查应用程序范围中是否存在主键,如果存在,则只需更新对象中的数据并使用它,否则创建一个新对象。对象的初始创建是该过程中最繁重的部分。

代码语言:javascript
复制
<cfif not structkeyexists(application, "objectcache")>
    <cfset application.objectcache = {} />
</cfif>
<cfloop query="children">
    <cfif not structkeyexists(applicatin.objectcache, "childtable--#ID#")>
        <cfset application.objectcache = createobject(...).init(...) />
    </cfif>
    <cfset arrayappend(variables.instance.children, application.objectcache["childtable--#ID#"]) />
</cfloop>

您可能还希望在代码周围抛出一个cflock,以防止出现问题。如果您确实有大量的对象,这仍然是有帮助的,因为您可以通过在对象或另一个结构中使用日期标志来缓存最近的10,000个对象。

票数 3
EN

Stack Overflow用户

发布于 2012-03-28 21:07:24

底线是ACF中的对象创建一直都是内存密集型的。有了ACF9,它变得更好了,但不是很多。我可以保证,在Railo上运行相同的代码(你可能需要稍微修改一下),你会看到在CFC创建和内存消耗方面有很大的改进。这并不是告诉你为你的项目切换引擎,它只是告诉你,如果你使用ACF作为引擎,你需要重新考虑你的应用程序的架构,不要使用太多的ACF。

也就是说,要做的第一件事是问问自己,你真的需要创建这么多的CFCs吗?尽管人们愿意相信CFCs是CFML的瑞士军刀,但它们实际上是一把双刃剑。虽然它们可以为您封装逻辑,但它们也会带来性能上的权衡。我经常看到填充到to中的数据,可以重写为使用数组和结构来表示数据结构。

因此,在你的例子中,与其试图让ACF做一些它永远不会做的事情(高效地创建对象),不如重写代码,使用数组和结构,只有在绝对必要的时候才使用CFCs。

票数 2
EN

Stack Overflow用户

发布于 2012-03-28 20:48:42

一种选择是重构您的代码以执行以下操作:在创建和更新函数时使用do (在需要持久性的地方),在读取时使用结构。创建一个结构(一个哈希图)比创建一个CFC便宜得多。

然后,您的视图几乎总是引用对象及其子对象的结构版本,而您的模型在进行属性调用时需要同时处理结构版本和CFC版本。这种方法在直接引用对象成员的方式上会导致代码不一致,但与尝试一次创建数百或数千个of相比,这种方法要快得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9896643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档