Internet Explorer 8 - ACR(Automatic Crash Recovery)
在 jeff-yeh 的 Internet Explorer 8 (IE8) 使用經驗 這一篇中有提到當 Internet Explorer 8 執行的時候,會兩個 iexplore.exe 在系統中執行。
讓我想 IE8 增進 Reliability 的重要功能之一:Automatic Crash Recovery(ACR)。
而 ACR 最主要的功用就是,在 IE8 發生程式發生異常而導致關閉,在重新執行 IE8 能夠重新恢復使用者原先的狀態,包含(1) 瀏覽紀錄(Travel Log) 與 (2) 頁籤組(Tab Set)。
Travel Log 主要是記錄使用者瀏覽歷史紀錄,例如:瀏覽了 A 網站 –> B 網站 –> C 網站,我們可以透過 上一頁(backward) 與 下一頁 (forward),由 C –> B –> A 再由 A –> B –> C。利用 ACR 恢復後的 IE 仍會保留 Travel Log,使用者就可以繼續使用 上一頁(backward) 與 下一頁 (forward) 動作。
從 IE7 開始,IE 就支援 Multi-Tab 多頁籤功能:同一個 IE 擁有多個頁面 Tab,擁有各自獨立的瀏覽記錄。例如 Tab 1 瀏覽了 A –> B –> C、Tab2 瀏覽了 I –> J 、Tab3 瀏覽了 X –> Y –> Z。當 IE 8 的 ACR 執行復原動作後,仍會恢復 Tab1 、Tab2 與 Tab3,也會復原各自頁籤 Tab 的瀏覽紀錄(A->B->C、I->J、X –> Y –> Z)。
IE 8 的 Default Setting 是有開啟 ACR 功能的,要先檢查該功能可以進階選項(Advanced)中,在瀏覽分類(Browsing)下的 Enable automatic crash recovery 選項確定是勾選狀態就可以了。
當我們開啟 IE8 的時候,我們利用 Process Explorer 來觀察系統中執行情況:
會發現系統中會有兩個 iexplore.exe 正在執行
仔細觀察這兩個 iexplore.exe,一個 PID 為 3744 一個 PID 為 5220 (Process ID 是系統指定,每次都不一樣),在 Command line 的地方是不一樣的。
3744 是 「C:\Program Files\Intenet Explorer\iexplore.exe」 (未帶參數)
5220 是「C:\Program Files\Intenet Explorer\iexplore.exe」 SCODEF:3744 CREDAT:71938 (帶參數)
其中 3744 就是我們 IE8 的主體程式,而 5220 就是其中一個 Tab 視窗,它的呼叫參數是主體 IE 的 PID 3774。如果你開啟了 N 個 Tab 的話,系統正在執行的 iexplore.exe 應該就會有 N + 1 個,包含 1 個主體 IE 加上 N 個 Tab Process IE。
在一開始的時候,我們有講到 ACR 會儲存的狀態包含了(1)瀏覽紀錄(Travel Log) 與 (2) 頁籤組(Tab Set)。主要是因為 ACR,分成兩種的恢復模式:(1) Tab Recovey (2) Frame Recovery。
Tab Recovey 恢復模式指的是,主體 IE 沒有發生錯誤,屬於 Tab Process 的 iexplore.exe 發生異常關閉時。ACR 就會自動產生另一份新的 Tab Process 的 iexplore.exe。而新產生的 Tab Process 會保留了原先 Tab Process 的 Travel Log。對使用者而言,只是會突然發現某一個 Tab 出現了 This tab has been recoverd 的字眼,可以繼續使用 上一頁(backward) 與 下一頁 (forward) 動作。而當一 Tab Process 的 iexplore.exe 發生異常關閉時,而不會影響到其他 Tab Process 的執行。
Frame Recovery 恢復模式,就是當真的發生嚴重的 Crash (例如:跳電、OS Crash、強制結束 iexplore.exe…等等),影響到本體 iexplore.exe 的運作。當下次啟動 IE8 的時候,就會出現以下的畫面,詢問使者確定是否復原上次的瀏覽紀錄,或是重新開啟新的頁面。如果選擇 Restore your last session (Reopens all tabs were open when your browser closed),就是恢復頁籤組(Tab Set)的功能。
而大家也可以試著把 Enable automatic crash recovery 的選項關閉,來體驗一下有 ACR 與沒有 ACR 下 IE 8 的運作情況。在沒有 ACR 之下,利用 Process Explorer (1) 強制關閉 Tab Process,模擬 Tab Process 發生異常,就會發生在沒有 ACR 模式下,任一 Tab Process 執行異常並不會影響其他 Tab Process 個體,就會瞭解什麼是 Tab isolation。(2) 強制關閉主體 IE,模擬系統發生異常,此時所有的 Tab Process 就會一同隨之關閉。但是,重新開啟 IE8 就不會有復原的提示訊息出現。
其實 ACR 這樣類似的功能並非 IE 8 獨有,在 Firefox 也有類似的功能。(Frame Recovery、NO Tab Recovery)
但是,通常單一個 Tab 發生異常,整個 Firefox 就會 Crash 掉了。
或是利用外掛(Add-ons) Tab Mix Plus 的回覆功能:(Frame Recovery)
Chrome 其實也有類似的功能:
有多少個 Tab 就會有多少個子 chrome.exe 在執行,單一 Tab 發生異常是沒有辦法恢復的 (No Tab Recovery):
如果主體 chrome.exe 發生異常,重新啟動 chrome 則有還原選項。(Frame Recovery)