鍍金池/ 問答/HTML/ 關(guān)于瀏覽器端的JavaScript爬蟲內(nèi)存溢出的問題

關(guān)于瀏覽器端的JavaScript爬蟲內(nèi)存溢出的問題

  1. 我的需求是實時獲取文字直播網(wǎng)站的數(shù)據(jù)(秒級同步,不使用頻繁請求的方式)
  2. 我的做法是打開目標網(wǎng)站,在控制臺執(zhí)行js代碼。具體步驟:先獲取第一條數(shù)據(jù),數(shù)據(jù)id存到j(luò)s變量,定時0.1秒獲取列表第一條數(shù)據(jù),判斷這條數(shù)據(jù)跟之前的js變量是否一致,一致則跳過,不一致則將當前數(shù)據(jù)存進數(shù)組,并把這條數(shù)據(jù)id賦值到j(luò)s變量(充當下一次的第一個id),遞歸往下獲取下一個兄弟dom,一直到找到最初的id號為止。然后把數(shù)據(jù)通過ajax發(fā)到我的后臺。
  3. 我的問題是運行幾分鐘到十幾分鐘火狐瀏覽器會出現(xiàn)“某個網(wǎng)頁讓您的瀏覽器變慢了。您想如何處理呢”,谷歌瀏覽器則直接卡死不動。我有三個目標網(wǎng)站,其中一個能正常運行幾天,另外兩個則出現(xiàn)以上問題。

火狐截圖

代碼地址:github

希望好心的朋友能幫我運行分析一下代碼。

回答
編輯回答
愚念

如果要發(fā)送到后臺的話 建議使用后臺去抓取 或者像一樓說的 直接抓取源站點請求的地址 js頻繁請求 可能是你后臺處理速度慢 或者次數(shù)過多會導(dǎo)致卡死

2017年10月30日 21:22
編輯回答
半心人

既然它們是用的ajax方法更新頁面,建議直接找到它們網(wǎng)站怎么更新數(shù)據(jù)的地方或者地址,然后自己加一個鉤子。。。


補充:因為目標頁面“使用websocket更新數(shù)據(jù)的,不定時斷線重連,參數(shù)加密更換”,所以最終的方法是使用了MutationObserver1來監(jiān)視列表元素的變化


  1. https://developer.mozilla.org... ?
2018年1月29日 14:48