概要
過去に JavaScript のメモリ管理について読んだことがあり、循環 DOM 参照などの問題を認識しています。
ただし、これはnode.jsなどのサーバー側の JavaScript 環境、より具体的にはexpressで記述された APIに変換されるため、まだ少し不快です。
このサンプル ファイルを使用します (server.js と呼びましょう)。
var npm_moduleA = require('npmA')({ someInitArg : 'blah' }),
app = express.createServer();
app.get('/api/foo', function (req, res) {
var result = npm_moduleA.doSomething();
res.send(result);
});
app.get('/api/bar', function (req, res) {
var npm_moduleB = require('npmB')({ someInitArg : 'blah' }),
result = npm_moduleB.doSomethingElse();
res.send(result);
});
質問(負荷の高いサイトだと仮定)
のライフサイクルは
npm_moduleA
?サーバーが起動した瞬間に作成されますが、いつ(GCがそれに対してキックしたとしても)-グローバルスコープにあるため、決して触れられないと思いますか?「/api/bar/」では、
npm_moduleB
リクエストごとに削除する必要がありますか? または、これは GC だけに任せるべきです。のグローバルなインスタンス化は
npm_moduleA
、のインスタンス化 (および削除の可能性) の反復よりもはるかに効率的npm_moduleB
ですか?