为什么Ajax轮询会随着时间的推移增加CPU使用率?

3
我有一个Web应用程序,每秒轮询服务器以更新其显示数据。我发现浏览器的CPU使用率逐渐增加(在一夜之间),从6%上升到30%,没有应用程序交互或行为变化。
这个问题可以很容易地在Chrome中重现,我将轮询间隔减小到100毫秒以获得更明显的效果。
<html>
<body>
<script>
var i = 0;
var xhr = new XMLHttpRequest();
xhr.onload = function() {
    console.log("response", i++);
    setTimeout(send, 100);
}
function send() {
    xhr.open("GET", "/", true);
    xhr.send();
}
send();
</script>

这段代码可以在任何像Web服务器一样的服务器上轻松运行,如:

python -m SimpleHTTPServer 8888

使用这个例子,CPU使用率会以非常快的速度增加,原因不明。我没有进行任何处理,使用setTimeout而不是setInterval,所以我从来没有重叠的请求。
我正在使用Chrome(和Safari)进行测试,仍然看到CPU使用率非常快地增加。有任何想法吗?

除非我打开开发工具,否则我看不到CPU使用率的增加,http://jsfiddle.net/YuJQ6/ - c69
c69,你说得对!虽然我的原始问题是在使用 Webkit 通过 Qt 的嵌入式系统上,但那里没有开发工具。我会在该系统上尝试上述代码并查看结果。 - Avner
啊,那样的话嵌入式 WebKit 可能会有泄漏问题。记住:所有那些糟糕的嵌入式 WebKit 都不是 Chrome,差距很大。我们在使用 Awesomium(用于 .NET)时遇到了很多麻烦,最终转向了正常的浏览器(在我们的情况下是可以接受的)。 - c69
1个回答

2
因为你每100毫秒就会在控制台输出一行新的内容 ;)

控制台输出是为了记录一些在更新UI时通常会发生的CPU活动。无论如何,它主要是为了加速正在发生的效果。它并不考虑随时间增加的CPU使用率的增加。 - Avner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接