2012-10-30 175 views
0

現在我正在使用AJAX來提取活動流列表(TwitchTV),它是觀衆,我每秒鐘都會要求提供。在時間流的列表來檢查可以得到相當漫長的,所以我打算分裂Ajax請求到2個或3個部分:多個AJAX請求 - 麻煩?

1)吸引觀衆數爲當前流(檢查每隔1秒)

2 )分流一半,並檢查活動飄帶(檢查每5秒)

3)檢查活動飄帶(檢查每5秒)

名單的下半場,所以我將有三個請求列表上半場同時運行,但我很擔心加載時間會下降到什麼程度。由於它不斷拉入數據會使頁面變慢嗎?用戶可能會注意到嗎?保留1個大量數據的ajax請求會更好嗎?還是更好地對更小的數據塊使用多個ajax請求? Ajax真的是最好的東西來吸引不斷變化的實時數據嗎?

+0

這會給你發送請求的服務器帶來負載 - 每隔幾秒對信息更新至關重要?如果不是,請考慮每分鐘緩存和更新。如果您希望客戶端/服務器連接是連續的,那麼也研究websockets(HTML5)。 – jacktheripper

+0

在技術上,它不會去我的服務器 - 我使用Twitch電視API - 所以它ping他們的網址來獲取頻道信息。雖然我確實在我的服務器上處理它,但如果這就是你的意思。那麼我每秒更新一次以顯示活躍觀衆的數量,並且我不希望活動頻道在我的列表中顯示幾分鐘,如果它們確實不活躍。我已經看過http://socket.io,但還沒有真正使用它。儘管如此! –

回答

1

回答你的各種問題可能是「這取決於」:

  1. 自己Ajax請求不應該做任何事情慢。這些是異步請求,所以它們只會在請求完成時實際上導致用戶的瀏覽器發生任何重大(並且可能仍然不明顯)的負載。

  2. 有一件事可能會減慢你的應用程序(或導致用戶注意到一個不愉快的方式)是請求完成時的DOM操作。改變你當前流媒體用戶的數量可能並不會受到影響,但根據流數/你如何在列表中顯示它們,重繪這可能會非常昂貴/導致像重畫這樣的事情。

  3. 使用Ajax(取決於您希望支持的瀏覽器)的替代方法是使用websockets。通過這種方式,您可以保持連接處於打開狀態,並且服務器可以在數據需要更改時告訴應用程序,而不是輪詢它。

  4. 爲什麼你需要把你的清單分成上半部分和下半部分?

  5. 減少來回發送的數據量的一種方法可能是發送某種類型的信號,指示您收到的最後一個數據位。例如,當twitter.com上的時間線每隔幾秒更新一次時,ajax請求會發送最近收到的tweet的ID,以便服務器知道不要浪費時間發送比此更早的數據。根據你的用例,這可能是有效的。

+0

首先感謝您的回覆。 (3)我聽說過網絡套接字,但不認爲這是有益的,所以我真的不得不做一些研究。(2)我每次都在重繪整個列表 - sorta。真的,我只是將圖像從紅色變爲綠色,如果它處於活動狀態並將其移至UL的頂部。 (4)我想過把它分開,因爲這個清單太大了 - 我沒有做出一個大的要求,而是認爲它可能更有益,但我真的不知道這只是一個想法。 (5)不確定你的意思,但我正在使用TwitchTV API,所以我可能沒有權限/能力這樣做。 –

+1

如果你直接從你的ajax請求調用他們的API,使用websockets可能不是一個選項,我的觀點也不是這樣。5.完成其中一個的最好方法是讓你自己的工作進程使用twitch api,提供一箇中間層,爲客戶提供他們所需的功能。這也有助於緩解可能的速率限制問題。 聲明:我從來沒有使用過這個API,所以我不確定你究竟在做什麼/它的限制可能是什麼。 –

+0

網絡套接字可能工作(從我讀到目前爲止),因爲你真的只是ping一個網址([示例](http://api.justin.tv/api/stream/list.json?channel=day9tv ))通過PHP並獲得json響應。不知道你是什麼意思的工人過程。 –