伯乐共勉

讨论。NET专区
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

IE 8 不得不说的七件事

Posted on 2010-04-08 11:05  伯乐共勉  阅读(448)  评论(0编辑  收藏  举报

在使用 IE 8 两周多以后,我们在此列出 IE 8 发布后,在 Web 开发、调试和执行调试中有重大影响的功能点。

#1 : IE 8 在同一域名下能同时开启更多连接

正如我们此前在《阻塞时间(Blocked time) 和 IE 8》一文中提到的一样,IE 8 中对同一域名的默认并发连接数已经增加了。在早期的 IE 版本中,最多允许两个连接从同一域名(例如:www.microsoft.com)同时请求内容。下面是一个 IE 7 中的 HttpWatch 抓图:

IE 7 允许同一域名两个并发请求

两个并发活动连接的限制经常会造成大量请求排队,直到其中一个连接完成才能继续下一个。在 HttpWatch 中,称之为“阻塞时间”(Blocked time),在时间图中显示为一个灰色块。

IE 8 活动连接数增加到 6 个(和 Firefox 3 相同),允许更多的并发请求,很大程度上减少了现在多数网页上出现的阻塞时间:

IE 8 允许同一域名六个并发请求

如果你很关注你站点的性能,你可以在 IE 7 下检验,无论如何,与 IE 8 下肯定有很明显的区别。

#2 : IE 8 使用了新的进程机制

IE 8 有一个新特性,叫 松散耦合 IE (LCIE),使用不同的 iexplore.exe 进程实例来提供增强的独立性和可靠性。IE 的帧窗口和 tabs 运行在不同进程中,这样一个 tab 崩溃以后你也不用结束整个浏览器会话:

IE 8 进程机制

如果发生错误,IE 8 会尝试重启或重开一个独立的 tab。弹出窗口也会使用类似的机制处理,如果可能,将会放到独立的进程中。

这种机制的优点是,允许保护模式和非保护模式站点的 tab 能够在同一顶级窗口中载入。IE 7 中,如果你打算在不同的保护级别上打开 tabs 的时候,才会创建一个独立的帧窗口。

最初,每个新的 tab 和弹出窗口都会获得一个新进程来打开,但随着 tabs 的数量增加,进程数会达到一个峰值。一旦达到了峰值,新的 tab 就会和其他的 tabs 共享现有的进程。默认情况下,进程数的上限是由 Windows 系统的可用物理内存决定的。

在旧版本的 IE 中,单击开始菜单上的蓝色“e”图标将会在一个独立 iexplore.exe 进程实例中创建一个新 IE 帧窗口。IE 8 中,这种行为变成要尽可能减少分配给 IE 的进程数。现在使用的技术,称之为“帧合并”(Frame Merging),如果已经有一个进程,它将使用现有的 IE 帧进程来创建 IE 帧窗口。

如果你希望使用不同的 IE frame 进程,你可以在 IE 快捷方式中增加一个参数 -nomerge 来实现:

iexplore.exe -nomerge

#3 : 所有的 IE 8 Tabs、窗口和弹出窗口属于同一浏览器会话

在旧版本的 IE 中,浏览器会话级的 cookies 能够在同一浏览器进程中保持。这意味着每次你单击 IE 图标开启一个新的 IE 进程的时候也就开始了一个新的浏览器会话,你可以同时登录到不同的账户(例如多个Gmail账户)。

IE 8 并不会给每个进程创建一个新会话,因为不同进程中的多个 tabs 或弹出窗口可能需要共享同一个会话级的 cookies。故而,浏览器会话现在能在进程中保持,包括了主 frame 窗口。

IE 8 中默认使用“帧合并”是为了防止创建多个帧进程,因此所有的窗口和 tabs 都属于同一会话。这个和《Firefox 使用单一的默认配置》中描述的行为相同。

但是如果你想在同一个站点同时登录两个或更多帐号怎么办呢?

为了创建一个新会话,你必须确保创建一个新的 IE 8 帧进程。有两种办法可以做到:

  1. 使用上面所述的 -nomerge 参数
  2. 使用文件->新会话。这会创建一个新的帧窗口进程和浏览器会话。

#4 : IE 8 进程机制可配置

IE 开发团队在文章中提到一个简单的注册表键值用于控制这种新进程机制。你需要在下面位置创建一个 DWORD 类型的键叫做 TabProcGrowth:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main

你可以控制在 IE 8 中有多少个浏览器进程:

TabProcGrowth 注册表键

最有用的三个键值设置如下:

  1. TabProcGrowth = - 默认设置,允许 IE 8 控制使用多少进程都基于物理内存总量。
  2. TabProcGrowth = 0 - 值为 0 表示每个浏览器会话中的所有 tabs、帧、弹出窗口都是用同一个进程。这让 IE 8 和 Windows XP 上的 IE 7 没有区别。没有帧合并,单击 IE 图标会在独立的浏览器会话中创建新 iexplore.ext 实例。设置了它以后 Vista 上的保护模式将不可用,因为如果 IE 帧和 tabs 在不同的进程中它们就只能在不同的完整级别(integrity levels)上被操作Protected mode on Vista is not available with this setting because the IE frame and tabs can only operate at different integrity levels if they are in separate processes. 如果你正在调试一个 IE 插件,或你正在进行基于 IE 7 进程机制的自动化测试,这个设置会很有用。
  3. TabProcGrowth = 1 - 值为 1 表示在一个浏览器会话中,所有 tabs 和弹出窗口会使用一个进程,IE 8 帧窗口使用另一个进程。该设置下帧合并被启用,并且 Vista 下也支持保护模式。如果你想让 tabs 和弹出窗口使用一个进程,但同时使用保护模式,你就可以把 TabProcGrowth 设置成 1。

指定大于 1 的值用于设定 tabs 进程的数量上限。

#5 : IE 8 中的兼容性工作区

IE 8 中新的、改进的标准模式执行意味着,原来在 IE 7 中能正确显示的页面,可能在 IE 8 中没法正确显示。理想的是,每个站点都更新它们的 HTML 来确保显示正常,但工作区提供了一个 IE 7 仿真选项。可以使用下列方式激活:

  1. 微软有一个 列表 来记录用户反馈的在 IE 8 下显示不正确的站点。IE 7 仿真模式将对列表中的站点自动生效,包括一些常见站点,例如 amazon.com、ebay.com、google.com,即使是微软公司自己的 microsoft.com!
  2. 一个网站开发者可以通过增加 META 到 HTML中来指定使用这种兼容模式:
    <META http-equiv="X-UA-Compatible" content="IE=EmulateIE7">

    或者使用一个响应报头:

    X-UA-Compatible: IE=EmulateIE7

    在微软主页上就使用了 META 标签,在 MSDN 网站使用的是响应报头,可以在 HttpWatch 中看到:

    emulateie7header1

  3. 如果用户遇到问题,可以在 IE 8 上点击兼容模式按钮:
    emulateie7button

    如果该站点已经是在 IE 7 仿真模式下,这个按钮不可见。

是否广泛使用 IE 7 仿真模式,取决于一个大型站点修改 HTML 适应 IE 8 标准模式且仍兼容 IE7 所花费的工作量。

#6 : IE 8 集成的新开发工具

IE 8 集成了一些新的优秀开发工具。你无需单独安装这些 IE 7 中使用的 Web 开发工具栏。这些工具包括:

  • ‘查看源文件’现在会打开一个支持 HTML 语法高亮和行号的窗口,而不是旧版的记事本软件。
  • 一个像 Firebug 一样的 DOM 查看器,能够显示任意 HTML 元素应用的 CSS 样式。
  • 一个 Javascript 调试器和控制台。

#7: 怎样在 IE 8 中使用 HttpWatch

在 IE 8 中你能看到唯一真正的区别来自于新进程机制。

HttpWatch 是根据进程来记录通信量的。因此在 IE 8 中会给每个 Tab 和弹出窗口进程记录不同的日志。总之,你不会太希望每个 tab 和窗口分别显示各自的日志。如果你想跨多 tabs 或弹出窗口记录日志,有两种途径:

  1. 改变 IE 8 的进程机制以便一个进程用于多个 tabs 和窗口(例如 TabProcGrowth 为 0 或 1 )。这样 HttpWatch 就能将所有通信都记入同一个日志文件。
  2. 如果你不想改变进程机制,你可以给每个 tab 和弹出窗口分别查看和记录日志。如果窗口没有工具栏你可以使用快捷键 Shift+F2 来打开 HttpWatch。

你将会发现 HttpWatch 快捷键在 IE 8 的地址栏和搜索区域都无效。我们在将来的更新中将解决这个问题,在此期间,你可以在页面内获得输入焦点后,使用快捷键。

 

原文:Seven Things You Should Known About IE 8