Поделиться через


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:

IE7 Process Model Diagram

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:

IE8 Process Model Diagram

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 open

  • Anonymous
    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. :p

  • Anonymous
    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? rich

  • Anonymous
    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/forum

  • Anonymous
    March 12, 2008
    The comment has been removed

  • Anonymous
    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! BOb

  • Anonymous
    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 developers

  • Anonymous
    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 removed

  • Anonymous
    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 removed

  • Anonymous
    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 removed

  • Anonymous
    March 12, 2008
    Internet Explorer 8 Beta 1: First Impressions

  • Anonymous
    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=us

  • Anonymous
    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 removed

  • Anonymous
    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 .net

  • Anonymous
    July 28, 2008
    Developing technologies that work reliably on their own and as part of the computing ecosystem is core

  • Anonymous
    August 27, 2008
    We’re excited to release IE8 Beta 2 today for public download. You can find it at http://www.microsoft.com/ie8

  • Anonymous
    August 27, 2008
    It was announced some time ago and right on time the IE team released the second beta of Internet Explorer

  • Anonymous
    September 08, 2008
    I happened to install Google Chrome (Alpha) the same day I installed Internet Explorer 8 (Beta). I noticed

  • Anonymous
    September 08, 2008
    I happened to install Google Chrome (Alpha) the same day I installed Internet Explorer 8 (Beta). I noticed

  • Anonymous
    September 30, 2008
    Hi, my name is Helen Drislane, I am a program manager on the IE team responsible for some of the user

  • Anonymous
    October 05, 2008
    EVOLUTION OF THE DESIGN AND ALGORITHM After shipping Internet Explorer 7, the IE team collected data

  • Anonymous
    October 13, 2008
    Привет, меня зовут Хелен Дрислейн и я являюсь программным менеджером в команде IE, ответственным за некоторые

  • Anonymous
    November 04, 2008
    IE8 beta1 introduced Loosely Coupled IE (LCIE) which gives tab a level of process isolation from the

  • Anonymous
    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.aspx

  • Anonymous
    March 31, 2009
    VS2005 does not debug with IE8 by default, due to IE8’s LCIE feature ( http://blogs.msdn.com/ie/archive

  • Anonymous
    April 05, 2009
    ほけーっと眺めていると、はまる人が多そうな、少なさそうな情報が投稿されていたので、転載します。転載元は、「 Tips & Tricks for ASP.NET, IIS, and Visual

  • Anonymous
    April 07, 2009
    IE8 и надежность Разработка технологий, которые надежны сами по себе и которые могут гарантировать надежную