应该在Coldfusion的应用程序/会话级别创建大量使用对象吗?

时间:2012-09-03 10:18:55

标签: java performance object coldfusion invoke

我正在运行Coldfusion8/MySQL 5.0.88

我的应用程序主要功能是搜索功能,在提交时会触发调用cfc-method的AJAX请求。该方法组装HTML,gzip并返回gzip压缩的HTML作为Ajax响应。

这是gzip部分:

 <cfscript>
 var result="";
 var text=createObject("java","java.lang.String").init(arguments[1]);
 var dataStream=createObject("java","java.io.ByteArrayOutputStream").init();
 var compressDataStream=createObject("java","java.util.zip.GZIPOutputStream").init(dataStream);
 compressDataStream.write(text.getBytes());
 compressDataStream.finish();
 compressDataStream.close();
 </cfscript>

我对此处cfobject的使用有点不情愿,特别是因为每个用户都会反复调用此脚本。

问题:
如果我在applicationsession级别创建对象,或者至少在重新创建对象之前检查对象是否存在,是否会提高性能?处理这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

如果您对对象的使用与问题中的代码片段中的内容类似,那么我不会将任何内容置于任何比请求更长的范围内。原因是:

  • 您实例化的对象不可重复使用(字符串是不可变的,输出流看起来也不可重复使用)

  • 即使它们可以重复使用,相关对象也不是线程安全的。它们不能在并发请求之间共享,因此应用程序范围不合适,实际上会话范围可能不安全,因为同一会话的并发请求很容易发生。

  • 你在那里使用的对象的创建成本可能非常低,所以如果可以的话,尝试缓存它们几乎没有什么好处。

如果你有真正资源密集型的对象,那么缓存和汇集这些对象是有意义的(例如数据库连接),但要做到这一点需要相当大的努力,所以你需要确保你首先需要它。