Page 252 - Web性能权威指南
P. 252
ਜ਼ࢽ܋ ޜခഗ ਜ਼ࢽ܋ ޜခഗ
ਜ਼ࢽ܋ ޜခഗ ਜ਼ࢽ܋ ޜခഗ
კक़߰
߸ႎ ှ ߸ႎ
ჽ
კक़߰
߸ႎ ှ ߸ႎ
图 15-1:轮询(左)与长轮询(右)的迟延
ჽ
利用长时间保留的 HTTP 请求(“挂起的 GET”)来让服务器向浏览器推送
数据的技术,经常被称作 Comet。不过,有时候也有人用其他名字称呼这
种技术,比如“保留 AJAX”、“AJAX 推送”或“HTTP 推送”。
通过将连接一直保持打开到有更新(长轮询),就可以把更新立即从服务器发送给客
户端。这样,长轮询就解决了消息交付延迟的问题,同时也消灭了空检查,减少了
XHR 请求次数和轮询的整体开销。在交付更新后,长轮询请求完成,然后客户端再
发送下一次长轮询请求,等待下一次更新:
function checkUpdates(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onload = function() { ➊
...
checkUpdates('/updates'); ➋
};
xhr.send();
}
checkUpdates('/updates'); ➌
➊ 处理更新并打开新的长轮询 XHR
➋ 发送长轮询请求并等待下次更新(如此不停循环)
➌ 发送第一次长轮询 XHR 请求
这样的话,是不是可以说长轮询永远都比定时轮询好呢?除非更新到达频率已知且
XMLHttpRequest | 239