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.
Thanks,
Andy Zeigler
Program Manager
Edit: first image updated; enhanced explanation added in "See LCIE in Action" section
Comments
Anonymous
March 11, 2008
Does this mean that if an addon crashes in one tab that the other tabs remain open? Or you restart the browser and try to recover the session anyway. I have seen ie8 go down as a whole and then recover the tabs. So it was either caused by an ie bug (not an addon) or you really always restart the browser and recover the tabs? Nice work anyway. I heard a lot of people complaining that FF crash recovery is cool. Yours is now cool too. If the tabs are in separate processes why do we need to restart all ie windows when changing "emulate ie7" state?Anonymous
March 11, 2008
Have you any information on IE8 webbrowser control in general or related to this topic ? There is no information for IE webbrowser control since IE7 from you guys. Are you not allowed to talk about IE COM Interface ? Do you still support this interface for IE in the future or not ? I've evaluate the (piece of sh*t).NET wrapper for IE, and still waiting for something better. .NET politics is so stupid, as you can see it with Windows Vista. Lessons learned, now give us a new IE8-COM control !Anonymous
March 11, 2008
How does the change in the process model affect the security of the browser or the browsers ability to maintain the security of the desktop?Anonymous
March 11, 2008
If each tab is a separate process, shouldn't each process in the second diagram have only one single tab?Anonymous
March 11, 2008
Great, the browser is ready to recover gracefully from bad add-on crashes! Now that it's safe to open the floodgates to potentially poorly-written add-ons, can we have some way to write managed code add-ons for the browser? I'd be happy with a supported shim from Microsoft (like the pre-VSTO Office add-in shims)! C'mon IE team, the time has come.Anonymous
March 11, 2008
If the tabs are in separate processes why do we need to restart all ie windows when changing "emulate ie7" state? thats a vary good and well said ? i been wanting to no that too evere time i hit the emulate ie7 it dos not work for me like why have some in if it dos not work?Anonymous
March 11, 2008
Can we make a tab run under a separate process if we want (or a specific domain)?Anonymous
March 11, 2008
@Mirronelli yes, if a tab crashes, the other tabs remain openAnonymous
March 11, 2008
I would also appreciate to get some information about a IE8 webbrowser control in NET Framework. With IE8 Beta 1 installed, .NET 2.0 SP1 still uses the IE7 engine for rendering at the moment.Anonymous
March 11, 2008
I see a nice feature linked tot that in my IE8 on XP. While displaying the page http://tirania.org/blog/archive/2008/Mar-10.html it crash the tab (due to the google javascript on the right, as it also crash if i extract the code), then restore it, crash again. ... And then it give up with the message "Internet Explorer has stopped trying to restore this website. It appears that the website continues to have a problem" and doesn't enter an infinite loop. Nice (but the crash isn't).Anonymous
March 11, 2008
virtualblackfox: I like how it's the website that "continues to have a problem", and not IE. :pAnonymous
March 12, 2008
Where is the list of known bugs in IE8 beta 1? I want to file some bug reports but I can't find the list of "known issues" and I obviously don't want to waste any time filing dups. Also when I try to log in to post a bug report in Connect I can't. It only shows me the bugs already entered, there is no link to add a new one, what gives? I thought this was the public bug tracking tool? richAnonymous
March 12, 2008
> You may have noticed that computers come pre-loaded with all sorts of software I think you mean “Windows computers”. > a lot of this software is useful and works well Ha ha ha ha! Aw, you guys.Anonymous
March 12, 2008
When debugging an ASP.NET project with Viusal Studio 2008, IE8 Beta 1 always tries to restore the tab I am debugging. Can this feature be turned off during debugging?Anonymous
March 12, 2008
In a more polite way than IEdude, I'd also like to request information on how current client-developers using the WebBrowser control will be affected by IE8. I know a lot of things may still be up in the air, but our product depends on your product so we need plenty of advance notice to test it.Anonymous
March 12, 2008
http://www.grim-games.com/forumAnonymous
March 12, 2008
The comment has been removedAnonymous
March 12, 2008
Bug Report: JT-016 IE8B1: Scope: Browser UI User Interaction Synopsis: If a user types in a long fragment of text in a textarea (e.g. enough to cause scrolling), then when at the end of the text fragment (caret focus near or at the end of the text) if the user presses CTRL+A to "select all", the browser should NOT force a scroll to the top of the selection. This behavior is distracting, and appears to the user that the content has changed.Anonymous
March 12, 2008
How does this affect sessions. If I am correct in IE7 session data is the same within the same process. So, if a new IE window is stated from the start menu, it is a new process, but if it is started with Ctrl-N it is the same process. Since each tab will be a seperate process, does this mean that session data is no longer shared from tab to tab? If so, VERY BAD! BObAnonymous
March 12, 2008
beta functionality wish list item: Drag the Emulate IE7 button to the New (empty, blank whatever you call it) Tab to open a new tab running the ie7 renderer. Alternate: Add an option to the tab context menu (right click on the tab) to switch between ie8 and ie7 modes. When switching, use the tab recovery feature and reopen the tab in the other mode. Alternate: Right click option to "Open in new IE8 tab" or "Open in new ie7 tab" While I can see major benefits for normal use, this feature would be invaluable during the betas at least.Anonymous
March 12, 2008
Another thought. I'm not familiar with the internals at all, but would this new structure allow the embedding of a firefox renderer as a tab? Could prove very productive to developersAnonymous
March 12, 2008
@IEdude @Dave The Web Browser Control (WebOC) is not impacted by the IE process model since it is a COM object instanciated in the caller's process. It was not impacted by Protected Mode support in IE7 nor is it impacted by LCIE in IE8. LCIE only applies when executing IE as the browser application. As with IE7 Protected Mode, the initial IE8 iexplore.exe process launched may not be the process that navigates and displays the URL. The IE7 APIs and COM interfaces for starting/accessing IE as a stand alone application were enhanced to deal with this change and are supported in IE8. Though the process model underneath is different in IE8, the need and APIs for finding the process that navigates the URL has not. Specifically wrt LCIE, the IELaunchURL API has been updated in IE8 to return the tab process information (not the frame process).Anonymous
March 12, 2008
Am I to assume that this is why I can no longer drag a link from a page and drop it onto the address bar, or a tab? (You couldn't drag a link to a tab in IE7 either FWIW).Anonymous
March 12, 2008
This is all nice, but if it's going to crawl, who cares? FF is pretty darned fast. Microsoft should really look at the speed issue.Anonymous
March 12, 2008
@Mirronelli There are two types of "crashes" in IE8 with LCIE: a tab process crash and a frame process crash. When a tab crashes, it will take down all tabs running in its tab process. IE as a whole does not crash and will recover "in place" the tab(s) that crashed. Reliability here becomes a trade off between how many tabs and tab processes are used; clearly, running each tab in its own process is both the most reliable (one tab will not crash other tabs) and the most costly (in resources). Our design intention is to support multiple tab processes and distribution of tabs across those processes. However, this is not supported in IE8 Beta1. IE8 Beta1 uses a single tab process at any integrity level to contain all tabs for a frame process, so the "multiple tab processes" question is moot for Beta1. In Beta1 therefore, if a Protected Mode (low-IL) tab crashes, all tabs in Protected Mode for that frame will crash and be restored; tabs for the frame at medium-IL would not crash. If the frame process crashes, the frames as well as the tabs will be recovered. The crash will look essentially the same as IE7 or earlier crashing.Anonymous
March 12, 2008
Adding on to me speed complaints, look at this: http://talkback.zdnet.com/5208-12353-0.html?forumID=1&threadID=45386&messageID=838124 So if Microsoft spent some time optimizing the string functions, then the overall speed would be better.Anonymous
March 12, 2008
The comment has been removedAnonymous
March 12, 2008
@PilotBob IE8 Beta1 places all tabs for a given IL for a started iexplore.exe into a single tab process, so the behavior of sessions/cookies is exactly the same as previous versions of IE. Sessions will not be shared across IL levels. If IE8 supports multiple tab processes at the same IL level in the future, the session/cookie issue will be addressed.Anonymous
March 12, 2008
@Alz: they already did. Run the test in IE8 and you find that it's >300% faster.Anonymous
March 12, 2008
The comment has been removedAnonymous
March 12, 2008
Can we please open up the bug tracking site? this is getting really annoying. I just ran some simple test pages in IE8 Standards mode and .setAttribute() / .getAttribute() is failing miserably for a "fixed" bug. Of 29 basic Elements, setting the "style" attribute failed on all of them for starters. Ugh!Anonymous
March 12, 2008
Please, PLEASE tell me that is will be possible to turn off this useless resource-hungry feature!!Anonymous
March 12, 2008
The comment has been removedAnonymous
March 12, 2008
Internet Explorer 8 Beta 1: First ImpressionsAnonymous
March 12, 2008
For more info about IE8 and other problems / solutions / bug reportslook here: http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.internetexplorer.beta&cat=en_us_2BAF8EC5-645C-4477-A380-0F1CF6C102F9&lang=en&cr=usAnonymous
March 13, 2008
The manner in which tabs are created and their respective order appears to be an improvement for usability and accessibility. Caveat: I can't explicitly recall how IE7 managed tab order. In terms of accessibility, perhaps consider inheritance of the zoom setting for a new tab from its parent or process? Thanks.Anonymous
March 15, 2008
It would be good to have UI feedback on the tabs to indicate which tabs are in Protected Mode and which are not - e.g. tint the tab pink if not in Protected Mode. Risks of cross-tab exploits?Anonymous
March 15, 2008
Ehkki IEBlog teatas juba möödunud nädala kolmapäeval, et IE8 esimene beta on väljas, polnud mul mahti sellega enne tänast tegeleda. Põhjuseks CeBIT 2008 ja sinna järgi kevadiste projektidega alustamine. Internet Explorer 8 esimene beta on mõ...Anonymous
March 16, 2008
The comment has been removedAnonymous
March 17, 2008
@Someone Thank you for your input. LCIE is an architectural change that underlies multiple current and possible future features or improvements, many of which do not involve a tradeoff between resources/performance and the feature. For example, the process model change in IE8 Beta1 eliminates the need for the IEUser.exe process, reducing some of the IE startup cost and resources on Vista and later operating systems. @Nidonocu Thank you for your input. The process model change makes it feasible to better decouple the frame from the tabs for hangs as well as crashes and that is a reliability improvement that we are considering.Anonymous
July 01, 2008
add-in and plug-in apps with .netAnonymous
July 28, 2008
Developing technologies that work reliably on their own and as part of the computing ecosystem is coreAnonymous
August 27, 2008
We’re excited to release IE8 Beta 2 today for public download. You can find it at http://www.microsoft.com/ie8Anonymous
August 27, 2008
It was announced some time ago and right on time the IE team released the second beta of Internet ExplorerAnonymous
September 08, 2008
I happened to install Google Chrome (Alpha) the same day I installed Internet Explorer 8 (Beta). I noticedAnonymous
September 08, 2008
I happened to install Google Chrome (Alpha) the same day I installed Internet Explorer 8 (Beta). I noticedAnonymous
September 30, 2008
Hi, my name is Helen Drislane, I am a program manager on the IE team responsible for some of the userAnonymous
October 05, 2008
EVOLUTION OF THE DESIGN AND ALGORITHM After shipping Internet Explorer 7, the IE team collected dataAnonymous
October 13, 2008
Привет, меня зовут Хелен Дрислейн и я являюсь программным менеджером в команде IE, ответственным за некоторыеAnonymous
November 04, 2008
IE8 beta1 introduced Loosely Coupled IE (LCIE) which gives tab a level of process isolation from theAnonymous
February 26, 2009
이 글은 Internet Explorer 개발 팀 블로그 (영어)의 번역 문서입니다. 이 글에 포함된 정보는 Internet Explorer 개발 팀 블로그 (영어)가 생성된 시점의Anonymous
March 31, 2009
VS2005 does not debug with IE8 by default, due to IE8’s LCIE feature ( http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspxAnonymous
March 31, 2009
VS2005 does not debug with IE8 by default, due to IE8’s LCIE feature ( http://blogs.msdn.com/ie/archiveAnonymous
April 05, 2009
ほけーっと眺めていると、はまる人が多そうな、少なさそうな情報が投稿されていたので、転載します。転載元は、「 Tips & Tricks for ASP.NET, IIS, and VisualAnonymous
April 07, 2009
IE8 и надежность Разработка технологий, которые надежны сами по себе и которые могут гарантировать надежную