[英]How to make a script that polls every second with POST or GET without lag?
我想為我的控制管理中心系統創建一個通知中心。 如果我使用這樣的東西:
$(function(){
setInterval(function(){
$.post("url", { data: 'value' }, function(result){
// check for updates
});
}, 1000);
});
該頁面一直處於滯后狀態。 不可能在“后台”做類似的事情嗎? 沒有加載或滯后問題? 如果可能的話,那就太好了! 我嘗試了幾件事,但效果不大。
您應該將間隔時間增加到比10次/秒更合理的時間。 大概每秒一次,值1000
您所指的是長輪詢。 不知道您的代碼對頁面做了什么,很難說出它導致頁面滯后的原因。 即便如此,每秒輪詢仍會在您擴展服務器時給服務器帶來很大的負擔。
您將需要增加時間間隔。 每3-10秒一次的操作不會對用戶體驗產生不利影響。 除非您要進行共享文檔編輯或繪圖應用程序,否則人們不會注意到。 聽起來您只是在推送通知。
如果您需要Web“實時”通知,請使用WebSockets。 您仍然需要為不支持WebSockets的瀏覽器實施長輪詢: “瀏覽器兼容性”下的詳細信息 。
HTML5 Rocks很好地介紹了WebSockets 。
如果您希望在兩次調用之間有一個確定的間隔,請嘗試使用setTimeout而不是setInterval,並調用具有郵編/獲取代碼的相同函數。 就像是
function myTimeout() {
//your code for post/get
setTimeout(myTimeout, 1000);
}
這是為了確保在下一次調用“ myTimeout”之前,“ Previous Interval”已完成,而后者又發出了帖子。 我相信,使用setInterval不能保證,在您的情況下,setInterval會調用一個函數,使函數每1000毫秒發送一次,無論如何。 在延遲情況下,呼叫可能無法以所需的間隔(1000毫秒)間隔開。 但是,這仍然不能保證兩次呼叫之間的固定間隔(如果呼叫/響應花費的時間比指定間隔更長)。 請在https://developer.mozilla.org/zh-CN/docs/Web/API/window.setInterval標題為“危險使用”下閱讀更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.