2012-09-03 36 views
1

我正在運行Coldfusion8/MySQL 5.0.88應該在Coldfusion的應用程序/會話級別創建重用對象嗎?

我的應用程序的主要功能是一個搜索功能,它在提交時觸發一個AJAX請求,調用一個cfc-method。該方法組裝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級別創建對象時,它提高性能,或者至少重新創建它之前的對象的存在進行檢查。處理這個問題的最好方法是什麼?

+0

我會試試看看它有什麼不同。 –

+0

你確實有點... – frequent

+0

我只是說,以防沒有人有一個好主意,你應該做什麼....;) –

回答

5

如果您使用的對象與問題代碼片段中的內容類似,我不會將任何內容放入比請求更長的活動範圍中。其原因是:

  • 你實例化對象不重複使用(字符串是不可改變的,而輸出流不看可重複使用的任一)

  • 即使他們再可用,所討論的對象不是線程安全的。它們不能在併發請求之間共享,因此應用程序範圍並不合適,實際上會話範圍可能不安全,因爲可能容易發生針對同一會話的併發請求。

  • 您在那裏使用的對象可能會創建非常低的開銷,所以如果可以的話,嘗試緩存它們幾乎沒有什麼好處。

如果你是真的資源密集型,然後緩存和彙集他們是有意義的(例如數據庫連接)的對象,但它是相當大的努力來得到正確的,所以你需要確保你需要它首先。

+0

好的。謝謝澄清。我一直在思考這方面的問題,但並不知道這是否正確。很確定這不是資源密集型的,所以我會保持原樣。謝謝! – frequent

相關問題