簡體   English   中英

如何制作一個腳本,用POST或GET每秒輪詢一次而沒有滯后?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM