哪个更快:充满 CFQUERY 调用或 CFINVOKE 调用的 CFM 页面?

Which is faster: CFM page full of CFQUERY calls or CFINVOKE calls?

哪个在内存方面更快更高效?

  1. 包含单个 CFQUERY 调用的 CFM 文件
  2. 包含对 CFC 的单独 CFINVOKE 调用的 CFM 文件,其中包含针对每个相同查询的单独方法

我知道调用组件的方法有多种方式,例如使用 createobject。现在,让我们将讨论限制在以上两个选项上。

我没有任何示例代码。只想知道在上述情况下什么是最佳实践。

此外,我使用的是较新版本的 Adob​​e ColdFusion(2016、2018、2021),因此 Lucee 不是一个选项。

简而言之,选项 #2 是推荐的做法。您想将 back-end 处理存储在 CFC 文件中,这些文件就像实体 classes 和控制器 classes 的对象一样,都是 CFM 文件的一部分,它充当演示文稿 class。这些协议都源于 object-oriented 编程范式。

现在,使用组件方法通常是保存查询的更好选择,(1) 这并不意味着您受限于此选项,并且 (2) 这并没有回答哪个性能更好的问题。然而,查询仍然应该从组件方法中调用。由于您有相同的查询,您可以简单地创建一个有状态查询对象,数据和方法可以封装在同一内存中space,从而提高整体性能。

我觉得这个问题很幼稚。选项 (1) 将 更快 因为它涉及更少的代码和更少的移动部件。我真的很想看到评论中提到的声称“cfinvoke”版本更快的测试。我怀疑测试有缺陷,或者没有测试 like-for-like.

然而,这种性能考虑是人们在 编写好的代码之后才看到的那种东西(所以...不是第一个选项。绝对不是那个),一个检测到性能问题。在这种代码差异化中很少会获得现实世界的性能提升。

写得好,干净,well-designed,easy-to-maintain 代码。先做那个。只有在你真的需要的时候,才恢复到糟糕的代码来尝试度过最后一毫秒。但仍然:直接在 .cfm 文件中的 <cfquery> 标签“永远不会”成为该解决方案的一部分。