1

私は走っていColdfusion8/MySQL 5.0.88ます。

私のアプリケーションの主な機能は検索機能であり、送信時にcfcメソッドを呼び出す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

4

1 に答える 1

5

オブジェクトの使用が質問のコードスニペットにあるものと同じである場合、要求よりも長寿命のスコープには何も入れません。理由は次のとおりです。

  • インスタンス化するオブジェクトは再利用できません(文字列は不変であり、出力ストリームも再利用可能に見えません)

  • それらが再利用可能であったとしても、問題のオブジェクトはスレッドセーフではありません。同時リクエスト間で共有することはできないため、アプリケーションスコープは適切ではなく、同じセッションの同時リクエストが簡単に発生する可能性があるため、実際にはセッションスコープも安全ではない可能性があります。

  • 使用しているオブジェクトは、作成するオーバーヘッドがおそらく非常に少ないため、可能であれば、それらをキャッシュしようとしてもほとんどメリットはありません。

本当にリソースを大量に消費するオブジェクトがある場合、それらをキャッシュしてプールすることは理にかなっています(たとえば、データベース接続)が、正しく行うにはかなりの労力がかかるため、最初にそれが必要であることを確認する必要があります。

于 2012-09-04T08:19:02.337 に答える