如何识别IE是否因每个域连接限制而耗尽

时间:2010-12-06 00:32:22

标签: javascript internet-explorer-7

如果IE忙于页面加载,那么它通常会显示旋转图标而不是favicon.ico。但如何区分以下

  1. 已达到连接限制且IE尚未收到所有内容
  2. IE收到了所有请求的响应,但正忙于呈现页面
  3. 如果没有完成任何JavaScript操作,IE会显示忙碌图标(主要是onload JavaScript调用吗?)

    谢谢和问候, 阿维纳什

2 个答案:

答案 0 :(得分:1)

关于“1.达到连接限制且IE尚未收到所有内容”这个限制在WinInet中强加,我甚至没有尝试回答这个问题,因为几乎所有我想到的方式甚至接近问题(来自页面内部)涉及的方法将进一步减少页面的加载时间。 DanP关于Fiddler的建议是一个很好的建议,你可以做的是为Fiddler写一个扩展或一些自定义脚本,当任何给定时间对同一主机名的两个请求进行处理时会记录,这样你就有了一个日志。否则,它只是在小提琴中引人注目,只是想看看同一主机名的两个请求是否同时处理,但总的来说请求完成得如此之快以至于试图在小提琴手中获得良好的感觉通过观看用户界面可能会有问题。

关于“2.IE收到来自其所有请求的响应但忙于呈现页面”,听起来您想知道页面何时准备好供用户与之交互。事实是IE不同步执行这些任务,它在下载内容时呈现页面,并且用户可以在IE仍在忙着下载时与页面交互。所以我所做的就是在这里包含一个示例,它显示了如何判断Internet Explorer选项卡中的微调器图标何时切换到favicon。当document.readyState ==“complete”时,微调器消失,但是页面已经准备好供用户在document.readyState ==“interactive”上与它进行交互,这也恰好在document.body.readyState ==“之后完成“,我不知道document.body.readyState ==”complete“是否是document.readyState ==”interactive“的原因,但它们似乎是一致的。但是,如果您确实想确定是否所有内容都已下载,那么DOM中的每个元素都有一个readyState属性,您可以枚举DOM以检查每个元素是否都有readyState ==“complete”以确定是否每个元素都已完成下载和渲染。

示例html可以保存到您的计算机并运行,但如果您从本地磁盘运行它,IE将提示您使用yello信息栏,您需要右键单击以允许它运行脚本。当html正常运行时,您应该看到javascript警报,您会在警告中注意到“document.readyState:interactive”,即微调器仍在旋转,但是当警告显示“document.readyState:complete”时,您会注意到微调器图标消失了。希望这会有所帮助。

<html>
<head>
    <script language="javascript">
        document.onreadystatechange = function(e)
        {
            alert("Document State: " + 
                             document.readyState + 
                             "\nBody State: " + 
                             document.body.readyState);
        };
    </script>
</head>
<body>
Test Content
<div id="placeToAddTo"></div>
<script language="javascript" type="text/javascript">
    for(var i = 0; i < 1000; i++)
    {
        var obj = document.createElement("div");
        obj.innerText = "Div Number: " + i + " Document State: " 
                   + document.readyState + " Body State: " 
                   + document.body.readyState;
        document.getElementById("placeToAddTo").appendChild(obj);
    }
    alert("completed creating object");
</script>
</body>
</html>

答案 1 :(得分:0)

也许唯一的方法就是看Fiddler之类的东西 - 然后你可以准确地跟踪IE正在做什么,并且(有趣的时候)进行计数。

遗憾的是,我想不出任何其他方式。