微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Cold Fusion 中跨不同 cfm 页面访问变量

如何解决在 Cold Fusion 中跨不同 cfm 页面访问变量

我有一个 cfquery 结果集,我需要在代码的不同 cfm 页面中访问它。最初我尝试通过将其序列化为 json 对象将其分配给客户端范围内的变量。但是,CF 不允许在客户端范围内分配复杂的数据。我尝试将它分配给应用程序范围内的一个变量,但问题是对于一个用户,有时该值与同时登录应用程序的另一个用户相似。 任何人都可以帮助我提供替代方案来实现这一点,因为客户端范围变量和应用程序范围变量是不可选择的。

解决方法

在任何范围内存储查询数据时都必须非常小心。您最终可能会在这些范围内存储越来越多的数据,这会消耗服务器上的内存。如果没有从这些范围(特别是 serverapplicationsession)中清除此数据的策略,随着时间的推移,您可能会对服务器的性能产生负面影响。随着用户数量的增加,缓存数据/内存也会增加,而应用程序的性能会下降。

通常情况下,我更愿意根据需要在各个页面上重新运行查询。使用包含查询的函数创建 CFC。将查询的任何相关数据作为参数传递给函数。然后您可以在多个页面上重复使用该查询。

CFML 应用程序中变量作用域的精彩概述:

http://www.learncfinaweek.com/course/index/section/Decision_Making_and_Scopes/item/Scopes/

  • 应用程序: 应用程序变量在当前命名应用程序的所有连接的客户端之间共享。这个范围是 也用于使用单例模式实例化的对象。这 范围在应用程序的整个生命周期内跨请求可用, 可能会在服务器关闭、应用程序故障或 应用超时。
  • 会话:开发人员使用会话变量来跨请求存储单个访问者的数据。此范围仅适用于 当前会话,并将持续到服务器或应用程序 终止或会话超时。

代码重用组件概述:http://www.learncfinaweek.com/course/index/section/Code_Reuse/item/Components

,

假设查询没有改变,可以使用 cfquery 的 cachedWithin 属性。

<cfquery name="getEmployees" datasource="cfdocexamples" cachedwithin="#CreateTimespan(0,60,0)#" >
    SELECT FIRSTNAME,LASTNAME,EMAIL,PHONE
    FROM EMPLOYEES
</cfquery>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。