이 경로로 인해 서버의 메모리가 서서히 소모되어 그 이유를 알 수 없습니다. 어리석은 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"
});
}
});
});
...
이 방법이 도움이 될지 모르지만 [node-memwatch] (https://github.com/lloyd/node-memwatch)를 사용해 보았습니까? – incutonez
[HTTPS 요청] (http://nodejs.org/api/https.html#https_https_request_options_callback)에서 'secureProtocol' 플래그로 지정할 수있는 TLSv1을 사용하려는 것 같습니다. 사용자 지정 에이전트를 만들거나 에이전트를 사용하지 않아도 사용할 수있는 것처럼 보입니다. – incutonez
DOM을 사용하는 것을 피할 수있는 사람은 아니지만, 단지 regexp를 사용하여 viewstate 데이터를 얻고, jsdom 대신에 eventvalidation을 사용해야합니다 (크기는 크지 만 ...). 그들은 base64 문자열이어야하며 예측 가능해야합니다. – Tracker1