【问题标题】:Difference between calling .cfm and .cfc with JQuery Ajax?使用 JQuery Ajax 调用 .cfm 和 .cfc 之间的区别?
【发布时间】:2019-06-22 18:52:37
【问题描述】:

我正在开发新系统,与我以前看到的几乎没有什么不同。基本上有一个带有“POST”类型和指向.cfm 页面的URL 的JQuery ajax 调用。 .cfm 页面将返回 html 表。

在与首席开发人员交谈后,他提到这种方法更有效。通过这种方式调用.cfm,我们不会在每次调用时都创建新实例。另一种方式,如果我们使用 .cfc 并调用函数,每次都会创建新实例。我不知道ColdFusion 的屏幕和深层背后的一切。

他提到的另一件事是这样更好,因为我们不使用任何框架。在过去的 4 年里,我一直在使用 ColdFusion,我过去看到的是 JQuery Ajax 调用 component.cfc 并带有特定的 method 名称。返回数据并动态构建表。我想知道是否有人对此了解更多,为什么.cfm 可能比调用.cfc 更好。

谢谢。

【问题讨论】:

  • 我认为这可能完全属于“视情况而定”的范畴,您得到的任何答案都可能不适用于未来读者的情况。 “更高效”究竟是什么意思?就个人而言,我认为在整个堆栈中调用 .cfc Web 服务会“更有效”,该服务会返回一些 JSON 数据,这些数据用于构建您提供给最终用户的表。就像你描述的那样。尽管“POST”暗示了与“GET”不同的东西。根据您的操作,.cfm 可能是“更好”的选择。听起来您的开发人员可能正在谈论缓存。但同样,什么是“更好”?视情况而定。
  • 如何传输数据是一个不同的话题。它与 cfc 与 cfm 的选择无关。
  • 回到 CF 8 天,实例化 CFC 既慢又昂贵。这就是为什么引入像 ColdSpring 这样的框架来缓存 CFC 实例的原因。多年来,这种情况发生了变化。
  • Datatables 用于进行分页和处理大数据,包括让您选择每页要显示多少条记录。它非常灵活。 RE: GET 与 POST,他们都可以做同样的事情,只是不同。通常,GET 是当您请求数据并且什么都不会改变时,而 POST 是将数据发送到可能会发生变化的服务器。两者都会返回响应。 GET 在 URL 中发送; POST 在标头中发送。有很多考虑因素,比较两者本身几乎就是一个研究课题。 w3schools.com/tags/ref_httpmethods.asp
  • 因为这本质上是联系 ColdFusion 以获取数据以重新插入 DataTables,所以我可能不同意不使用基于 CFC 的 Web 服务、返回 JSON 或其他一些轻量级有效负载。 DataTables 不需要为它构建的 HTML 页面。这就是 DataTables 对您发回给它的数据所做的事情。我认为 CFC 提供的好处远远超过了使用 .cfm 代替的大多数担忧。但同样,您的应用程序和基础架构的细节可能会使 .cfm 更实用。所以我回到“它取决于”。

标签: web-services coldfusion frameworks coldfusion-11 cfc


【解决方案1】:

期待评论

我同意其他人已经说过的话。没有具体的答案,因为它总是依赖于更多的东西,而不仅仅是这段代码。说了这么多……

我从 Adob​​e 文档 here 中找到了这个,这似乎很相关。以下是该文档的摘录。我用 bold 突出显示了似乎相关的部分。注意 CFC 实例化之后的部分。您可以在链接中阅读更多内容。

何时使用 CFC

您可以通过以下方式使用 CFC:

  • 开发结构化、可重用的代码
  • 创建网络服务
  • 创建 Flash 远程处理元素
  • 使用异步 CFC

开发结构化、可重用的代码

CFC 为开发将显示元素与逻辑元素分开并封装数据库查询的结构化应用程序提供了一种极好的方法。您可以使用 CFC 创建您(和其他人)可以在需要时重复使用的应用程序功能,例如用户定义的函数 (UDF) 和自定义标签。如果您想修改、添加或删除组件功能,您只需在一个组件文件中进行更改。 与 UDF 和自定义标签相比,CFC 有几个优点。 CFC 自动提供的这些优势包括以下所有方面:

  • 能够将相关方法分组到单个组件中,并将相关组件分组到一个包中
  • 多个方法可以共享的属性
  • This 范围,特定于组件的范围
  • 从基础组件继承组件方法和属性,包括使用 Super 关键字
  • 访问控制
  • CFC 方法、属性和元数据的自省
    CFC 有一个特点,它阻止它们成为所有代码重用的自动选择。与处理自定义标签相比,实例化 CFC 需要更多的处理时间。反过来,处理自定义标签比执行用户定义函数 (UDF) 花费的时间要多得多。但是,在实例化 CFC 之后,调用 CFC 方法的处理开销与等效的 UDF 大致相同。因此,请勿使用 CFC 代替独立的、单一用途的自定义标签或 UDF。相反,使用 CFC 创建相关方法的主体,尤其是共享属性的方法。 有关 UDF、自定义标记和其他 ColdFusion 代码重用技术的更多信息,请参阅创建 ColdFusion 元素。

创建网络服务

ColdFusion 可以自动将 CFC 方法发布为 Web 服务。要将 CFC 方法发布为 Web 服务,请在方法的 cffunction 标记中指定 access="remote" 属性。 ColdFusion 生成所有必需的 Web 服务描述语言 (WSDL) 代码并导出 CFC 方法。有关在 ColdFusion 中创建 Web 服务的更多信息,请参阅使用 Web 服务。

现在我并不总是信任 Adob​​e 文档,因为他们有一个讨厌的习惯,就是将现有文档从一个版本转移到另一个版本。所以谁知道这最初是什么时候写的,如果它仍然是真的。这是 Adob​​e 的 ColdFusion 特有的,Lucee 可能更擅长处理这个问题,但我不确定。

该文档也引用了此文档 - Selecting among ColdFusion code reuse methods。我也会在此处包含该信息。

下表列出了采用代码重用方法的常见原因,并指出了针对每种目的要考虑的技术。字母 P 表示该方法是首选方法。 (可以有多个首选方法。)字母 A 表示该方法提供了在某些情况下有用的替代方法。 此表不包括 CFX 标签。只有在最好用 C++ 或 Java 编写功能时才使用 CFX 标签。有关使用 CFX 标签的更多信息,请参阅使用 CFX 标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多