IE8 and Loosely-Coupled IE (LCIE)
Hi, my name is Andy Zeigler, and I’m a Program Manager on the Internet Explorer Foundations team. I’d like to tell you about a new IE8 feature called Loosely-Coupled IE, or LCIE for short.
Essentially, LCIE is a collection of internal architecture changes to Internet Explorer that improve the reliability, performance, and scalability of the browser. It also paves the way for future improvements in other areas, including security and usability. To do this, we’ve
isolated the browser frame and its tabs and changed them to use asynchronous communication between components.
In this post, I’ll walk you through the changes we’ve done in IE8 Beta 1.
You may have noticed that computers come pre-loaded with all sorts of software. While a lot of this software is useful and works well, some of it, including IE add-ons, can crash and interfere with your browsing experience. Internet Explorer 3rd-party add-ons are COM-based, which enables developers to write high-performance add-ons with powerful features. This also means that IE and running add-ons share the same process and memory address space, so when an add-on crashes, it causes the whole browser to crash. According to an analysis we did of our Windows Error Reporting data, over 70% of all IE hangs and crashes are caused by 3rd-party add-ons. We work closely with software vendors of the most frequently installed IE add-ons to help improve the quality of their add-ons. However, due to the large number available add-ons, it is difficult to provide outreach to every developer.
The IE Process Model
Part of what we’ve done with LCIE is to split the frame from the tabs, and allow them to function more autonomously. As a refresher, here’s a somewhat simplified view of the IE7 process model:
In the IE7 model, each browser window (UI Frame) usually has its own process. There are a couple of exceptions. For example, if you press ctrl-n to open a new window, IE creates a new UI frame in the same process. The tabs, toolbar extensions, browser helper objects, and ActiveX controls all reside in the same process as the browser window. The problem with this model is that a single access violation, stack overflow, or any other type of failure will cause your entire browser, and all its tabs, to crash.
Below is a diagram of how we’ve changed the process model in IE8:
There are a number of notable changes here:
- Tabs are isolated from the frame, and are located in separate processes
This gives IE the opportunity to isolate many failures to the tab process, thereby reducing the amount of damage done to the rest of your browsing session.
- The frame and the broker object are located in the same process
This is a win for startup performance. The broker object is responsible for examining a URL, and determining if it should be loaded under Protected Mode or not, and launching IE at the appropriate integrity level. We no longer have to wait for the protected mode broker object’s process to startup before loading the rest of the browser .
- Low and Medium integrity tabs can reside in the same UI frame
The Windows Integrity Mechanism operates on a per-process basis. Now that we can place tabs into their own processes, we can turn Protected Mode on or off on a per-tab basis. This is a big usability improvement. You no longer need separate browser windows to view sites in and out of protected mode.
See LCIE in Action
Although these are all internal architecture changes, you can see their effect in a few different ways.
For example, on a computer running Windows Vista, open Internet Explorer, browse to some websites, and then open an HTML page from your computer’s hard disk. Notice that the page will open in a tab in the same window, alongside the tabs that are already there. Previously, we would have shown a dialog that said, “Internet Explorer needs to display this webpage in a new window”. This is because Internet files must run in Protected Mode, and local files must open outside of Protected Mode, and a single process runs with only one integrity level. With LCIE, we simply create two tab processes: one with Protected Mode on for your Internet files, and one with Protected Mode off for your local files.That dialog box is history!
We also have a new feature called Automatic Crash Recovery that uses tab isolation to recover from crashes in a really new and exciting way. I’ll be blogging about that shortly.
Edit: first image updated; enhanced explanation added in "See LCIE in Action" section