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
   247   248   249   250   251   252   253   254   255   256   257