在頁面上使用ActiveXObject的代價是很大的,如果我們的無刷新頁面使用xmlhttp技術,我們或許需要頻繁的建立xmlhttp對象,當然我們也可以使用全局變量來cache一個xmlhttp對象實例。但是這樣的方法適合於同步方式xmlhttp通信,而對於異步方式xmlhttp通信將會出現問題。由於沒有了進程的堵塞,用戶可能再次調用同一個xmlhttp實例,如果這時前一個通信未完成,那麼就失敗了。
建立一個pool來管理頁面上的xmlhttp對象實例,最明顯的好處就是不會再創建冗余對象,同時也不會出現多個操作在同一個工作的xmlhttp實例上被調用的情況。
具體實現,我們使用一個Array作為pool來存儲已創建的xmlhttp對象實例,然後每次調用從pool中去取一個實例。xmlhttp實例通訊完畢後我們不用做任何處置,因為它自身的readyState屬性可以標識出它是否可用,如果當時沒有空閒的xmlhttp實例,且pool中的實例數小於m_MaxPoolLength,那麼就創建一個新的實例並放入pool中。pool的實現代碼如下:
__XmlHttpPool__源碼#region __XmlHttpPool__源碼
var __XmlHttpPool__ =
{
m_MaxPoolLength : 10,
m_XmlHttpPool : [],
__requestObject : function()
{
var xmlhttp = null;
&nb