完全な話については、私の他の質問をチェックしてください。
基本的に、次のコードのソケットハンドラーで名前付き関数を使用する方が効率的かどうかを尋ねました。
var app = require('express').createServer()
var io = require('socket.io').listen(app);
app.listen(8080);
// Some unrelated stuff
io.sockets.on('connection', function (socket) {
socket.on('action1', function (data) {
// logic for action1
});
socket.on('action2', function (data) {
// logic for action2
});
socket.on('disconnect', function(){
// logic for disconnect
});
});
全体的な答えは「はい」でしたが(詳細については上記のリンクを参照)、次のコメントがThiefMasterによって投稿されました。
私はV8の内部に精通していませんが、関数を一度コンパイルして、別のスコープを接続するだけで毎回再利用するのに十分賢いかもしれません。
それが私の質問です。V8は、匿名関数を一度コンパイルして、匿名関数が通常複数の関数インスタンスの作成につながる状況でそれらを異なるスコープで再利用するのに十分スマートですか?たとえば、上記では、connection
イベントのハンドラーは1回作成されますが、、、およびのハンドラーは接続ごとに作成されるaction1
と思います。他の質問では、これは名前付き関数で解決されましたが、これがV8で必要かどうか、またはいくつかの最適化を行うかどうかに興味があります。action2
disconnect