IE 記憶體洩漏 引起 Flash Movie 無法關閉的問題
最近工作上又遇到奇怪的問題
據說客戶的電腦用 Internet Explorer 瀏覽器
撥放含有 Flash Media Server (FMS) 即時連線的 Flash 內容
該 IE 視窗關閉之後
連線無法終止
一直在背景與 FMS 連線
直到客戶把全部的 IE 視窗關閉才中斷
網頁中的 Flash Movie 是使用 SWFObject 來載入的
SWFObject 也更新到 1.4.4 版
在我自己的電腦上用了 Firefox 2.0 與 IE 6 一直都測不出來
只好像無頭蒼蠅一樣搜尋 Google 谷歌大神
的確也有人發生類似的的情況
像是 IE 視窗關閉之後
Flash 的音樂還繼續在背景撥放等等
不過卻找不到實際有問題的頁面以及有效的解決方式
隔了幾天之後,跟上次一樣索性把矛頭指向 IE Memory Leak Bug
果然又有斬獲!!
大致上好像是因為 IE 瀏覽器內記憶體回收 (GC) 的演算方式有瑕疵
遇到 Dom Object 與 JavaScript Object 反覆循環參照 (circular reference) 的情況無法有效回收記憶體
我也實際按照此原理測試
以下是用來建立 Flash Dom Object 與 JavaScript Object 反覆循環參照的程式碼:

Flash 內的 AS 只有單純的與 FMS 連線而已
(假如沒有安裝 FMS,改成撥放 Mp3 也可以)
假如在 window.onbeforeunload 事件內
沒有清除循環參照的話
一直重新整理網頁
Flash Movie 便會一直建立連線無法關閉
從 FMS Admin Console 就會看到連線數不斷增加
IE 記憶體洩漏 (memory leak) 相關參考資料:
QuirksBlog - Javascript memory leaks
Schlueterica - Memory Leaks in Microsoft Internet Explorer
talideon.com - Fixing JavaScript memory leaks for good
youngpup.net - DHTML leaks ... not so much, actually
其它相關參考資料:

