我的網站有多個部分每隔半秒鐘檢查一次更新,以便它可以提醒您有關郵件等。但是我覺得在站點上使用$ .post和setInterval可能會有點沉重。是否有更好的建議用於這些任務的替代方法?有沒有更好的方式來創建異步更新而不使用setInterval?
回答
socket.io剖析數據庫查詢是,如果你使用nodeJS的路要走。否則,結帳this jQuery plugin,它具有優雅的降級實現,即使不如socket.io全面。
不錯的插件!你不需要一些輕量級的Web服務器嗎?一個龐大的Apache/PHP進程每個用戶都會迅速地抨擊服務器... – cmc 2012-03-13 09:36:12
取決於該項目,大多數早期的網站在任何時候都可能只有20-50個用戶。這並不意味着你不能縮放PHP,看看wordpress.com或Facebook。 – soemarko 2012-03-13 14:12:58
當然你可以擴展PHP ......我只是懷疑websockets和PHP/Apache混合比長時間輪詢和PHP/Apache更好。短輪詢,當然沒問題。 – cmc 2012-03-13 15:15:11
是的,雖然這不是微不足道的。
更好的方法
您可以使用長輪詢(或「彗星」),這將打開一個連接,保持打開狀態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。
如果事情變得緩慢,嘗試在/數據源
- 1. 有沒有更好的方式來更新我的訪客端口號而不重新創建廚房實例?
- 2. 有沒有更好的方法來重新創建$ _SERVER ['QUERY_STRING']
- 3. 有更好更短的方式來處理異步數據嗎?
- 4. 有沒有更好的方式來使用C++而不是輪詢或選擇異步TCP套接字?
- 5. 有沒有更好的方式來動態創建動態函數,而不使用字符串格式和exec?
- 6. 有沒有更好的方式來設計zend_forms而不是使用裝飾器?
- 7. 有沒有更好的方式來使用分派器更新UI元素?
- 8. 有沒有更好的方式來使用jsx內的條件?
- 9. 有沒有更好的方法來創建Rails子類?
- 10. 有沒有更好的方法來創建這個模型? (Django)
- 11. 有沒有更好的方法來創建Django REST Web服務?
- 12. 有沒有更好的方法來創建此案例查詢
- 13. 有沒有更好的方式來使用jQuery切換
- 14. 有沒有更好的方式來使用WebForms?
- 15. 有沒有更好的方式來重複使用Matplotlib地塊?
- 16. 有沒有更好的方式來建立這個joomla網址?
- 17. 有沒有比使用instanceof更好/更簡潔的方式來有條件地創建一個類型? 【JAVA]
- 18. PHP有沒有更好的方法來創建這個新的數組?
- 19. 有沒有更好的方式在LinqToSQL中進行更新?
- 20. 有沒有更好的方式去使用ui.router來構建佈局?
- 21. 有沒有更好的方式來更新我的支持bean而不提交表單?
- 22. 有沒有更好的方式來制定這個實體框架4更新?
- 23. 有沒有更好的方式達特
- 24. 異步更新沒有AJAX的DIV層
- 25. 有沒有更好的方法來處理轉換異常?
- 26. 有沒有更好的方式來遞歸調用當前方法,而不使用它的名字?
- 27. 有沒有更好的方法?新來的c + +
- 28. ProgressBar沒有從異步任務更新
- 29. 異步任務沒有更新屏幕
- 30. 有沒有辦法使用通用DbCommand來執行異步更新?
setInterval絕對是設置異步定時事件的最佳方式。你說你有多個部分,每個部分都有自己的POST嗎?這似乎是它的重要部分。最好有一個請求獲取所有數據。 – loganfsmyth 2012-03-13 02:52:37
你應該真的放慢這些請求。每半秒發送一次HTTP請求就太多了。 20-30秒更理智一點。使用Web套接字是理想的。 – josh3736 2012-03-13 02:57:05
您可以增加間隔時間,這樣不會佔用太多的處理時間。這裏是術語Comet下的方法http://en.wikipedia.org/wiki/Comet_(programming) – Joseph 2012-03-13 02:58:10