2014-09-22 100 views
0

此路由導致我的服務器緩慢地耗盡內存,我無法弄清楚原因。可笑的exec()表達式和解析是必要的,因爲目標URL的古老SSL版本,我不能讓任何節點SSL庫信任或忽略。歡迎任何關於改進此代碼的其他建議。NodeJS內存泄漏

(function() { 
    var exec, express, fs, https, jsdom, qs, router, util; 

    express = require("express"); 
    jsdom = require('jsdom'); 
    exec = require('exec'); 
    https = require('https'); 
    qs = require('querystring'); 
    fs = require('fs'); 
    util = require('util'); 

    router = express.Router(); 

    router.get("/getVars", function(req, res) { 
    res.set({ 
     "Cache-Control": 'max-age=86400' 
    }); 
    return exec("curl -m 6 -1 'https://some.url.com'", function(err, b, stderr) { 
     if (b) { 
     return jsdom.env(b, ["http://code.jquery.com/jquery.js"], function(err, window) { 
      var eventvalidation, viewstate; 
      viewstate = window.$("#__VIEWSTATE").val(); 
      eventvalidation = window.$("#__EVENTVALIDATION").val(); 
      return res.json({ 
      viewstate: viewstate, 
      eventvalidation: eventvalidation 
      }); 
     }); 
     } else { 
     return res.json({ 
      viewstate: "verylongstring", 
      eventvalidation: "verylongstring" 
     }); 
     } 
    }); 
    }); 

... 
+0

不知道這是否會有所幫助,但您是否嘗試過[node-memwatch](https://github.com/lloyd/node-memwatch)? – incutonez 2014-09-22 23:09:41

+1

看起來你正在嘗試使用TLSv1,[HTTPS請求](http://nodejs.org/api/https.html#https_https_request_options_callback)允許你使用'secureProtocol'標誌指定......但它確實看起來你要麼必須創建一個自定義代理或使用任何代理才能使用它。 – incutonez 2014-09-22 23:21:07

+0

我不是一個避免使用DOM,但你應該使用正則表達式來獲取視圖狀態數據,事件驗證,而不是jsdom(這是很大的,至少可以這樣說)......如果它們是.net他們應該是base64字符串和可預測的。 – Tracker1 2014-09-23 00:13:42

回答

1

我建議消除jsdom,因爲它是爲你的有限需求非常重質組分,這將可能有一對夫婦正則表達式得到更好的服務,請參閱下文。

... 
    return res.json(getDataFromString(b || '')); 
    ... 

function getDataFromString(input){ 
    return { 
    viewstate: (/id=\"__VIEWSTATE\" value=\"([^\"]*)\"/).exec(input)[1] || "verylongstring", 
    eventvalidation: (/id=\"__EVENTVALIDATION\" value=\"([^\"]*)\"/).exec(input)[1] || "verylongstring" 
    } 
}
+1

此外,如果您可以使用長客戶端緩存緩存服務器端可以做到這一點,以減少您的請求 – Tracker1 2014-09-23 00:30:47

+0

感謝您的提示,我今天就試試看,並報告回來 – mz3 2014-09-23 13:50:42

+0

現在好了好幾萬倍,非常感謝。 – mz3 2014-09-23 14:55:41