2012-03-13 57 views
3

我的網站有多個部分每隔半秒鐘檢查一次更新,以便它可以提醒您有關郵件等。但是我覺得在站點上使用$ .post和setInterval可能會有點沉重。是否有更好的建議用於這些任務的替代方法?有沒有更好的方式來創建異步更新而不使用setInterval?

+1

setInterval絕對是設置異步定時事件的最佳方式。你說你有多個部分,每個部分都有自己的POST嗎?這似乎是它的重要部分。最好有一個請求獲取所有數據。 – loganfsmyth 2012-03-13 02:52:37

+0

你應該真的放慢這些請求。每半秒發送一次HTTP請求就太多了。 20-30秒更理智一點。使用Web套接字是理想的。 – josh3736 2012-03-13 02:57:05

+0

您可以增加間隔時間,這樣不會佔用太多的處理時間。這裏是術語Comet下的方法http://en.wikipedia.org/wiki/Comet_(programming) – Joseph 2012-03-13 02:58:10

回答

1

socket.io剖析數據庫查詢是,如果你使用nodeJS的路要走。否則,結帳this jQuery plugin,它具有優雅的降級實現,即使不如socket.io全面。

+0

不錯的插件!你不需要一些輕量級的Web服務器嗎?一個龐大的Apache/PHP進程每個用戶都會迅速地抨擊服務器... – cmc 2012-03-13 09:36:12

+0

取決於該項目,大多數早期的網站在任何時候都可能只有20-50個用戶。這並不意味着你不能縮放PHP,看看wordpress.com或Facebook。 – soemarko 2012-03-13 14:12:58

+0

當然你可以擴展PHP ......我只是懷疑websockets和PHP/Apache混合比長時間輪詢和PHP/Apache更好。短輪詢,當然沒問題。 – cmc 2012-03-13 15:15:11

4

是的,雖然這不是微不足道的。

更好的方法

您可以使用長輪詢(或「彗星」),這將打開一個連接,保持打開狀態20秒左右,並立即重新打開它。服務器可以隨時發送內容。

較新的瀏覽器提供websockets,它提供持久連接。

兩者都相對複雜的代碼,所以你需要some kind of framework來爲你處理事情。另外,每個用戶都需要打開一個連接,所以它只能用於像NodeJS這樣輕量級的東西。

更簡單的方法

如果你想要的東西更容易實現,我會建議您檢查更新如你所說(這就是所謂的短輪詢與長輪詢/ WebSockets的對比吧)。你可以做一個簡單的投票解決方案,像這樣:

window.setInterval(function() { 
    // More lightweight than $.post 
    $.get('/datasource', function() { 
    /* do something */ 
    }); 
}, 3000); 

3秒間隔have been used in used before by high profile people

如果事情變得緩慢,嘗試在/數據源

+3

+1 - 長輪詢/網絡套接字確實是這樣做的正確方法。另外,[所有的辛苦工作已經完成。](http://socket.io/) – josh3736 2012-03-13 02:57:35

+0

感謝您的鏈接喬希!確認這是一個很好的框架,我的一個非常能幹的人物正在成功地使用它來處理一些嚴重的實時問題。 – cmc 2012-03-13 03:09:38

相關問題