搜尋

首頁  >  問答  >  主體

javascript - ajax輪詢導致瀏覽器記憶體每次遞增

ajax輪詢導致瀏覽器記憶體每次遞增,我也查過相關資料,有說在complete中

完整ajax程式碼:

    var Timer_getlastLog,ajax_flag;
    Timer_getlastLog = setInterval(function () {
        if(ajax_flag==true){
            getLastLog(lastMsgId);
        }
    }, 1000);
    function getLastLog(msgid) {
        ajax_flag = false;
        $.ajax({
            type: 'post',
            dataType: 'json', 
            url: 'url.html', 
            data: {msgid: msgid}, 
            success: function (a) {
                //此处省略其他的业务逻辑
                lastMsgId=a.msgid;
                ajax_flag = true;
            },
         
        });
    }    

像這樣,但是 記憶體開銷還是一直在增加,

#現在都已經快跑2個G了。不知道有什麼解決辦法嗎?暫時不考慮 socket。

補充:
1.我服務端,用的TP框架,然後有考慮過給一個while (true) 再給一個sleep(1);但是這樣導致,反復刷新頁面後,apache的內存開銷大增,產生擁堵,頁面無法正常載入顯示。這點也讓我很頭痛。

2. 我是參考了 http://blog.csdn.net/mlx212/a... 這篇文章對此程式碼的業務上的修改,不影響邏輯。

我想大声告诉你我想大声告诉你2781 天前880

全部回覆(4)我來回復

  • 大家讲道理

    大家讲道理2017-05-24 11:35:53

    題主你這不是輪詢了,是無限遞歸,會爆機的;輪詢是有定時間隔的, setInterval。

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-24 11:35:53

    你的程式碼有問題,輪詢對服務端才有壓力,前端和平時你訪問介面一樣

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-24 11:35:53

    看啦你給的連結 ,不管error還是success都會執行自身 這不是無限遞歸嗎?

    回覆
    0
  • PHPz

    PHPz2017-05-24 11:35:53

    不用遞歸,用setInterval

    回覆
    0
  • 取消回覆