有关完整的故事,请查看我的其他问题.
基本上,我曾问过在以下代码中使用套接字处理程序中的命名函数是否更有效:
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
});
});
Run Code Online (Sandbox Code Playgroud)
总体答案是肯定的(有关详细信息,请参阅上面的链接),但ThiefMaster发布了以下评论:
我不熟悉V8的内部结构,但它可能足够聪明,可以编译一次这个函数并且每次都重复使用它,只是附加了不同的范围.
所以现在这是我的问题.在匿名函数通常导致创建多个函数实例的情况下,V8是否足够智能来编译匿名函数并在不同范围内重用它们?例如,上面我所期望的处理程序中connection,以创建一次事件,但对于处理程序action1,action2以及disconnect为每个连接创建.在另一个问题中,这是通过命名函数解决的,但我更感兴趣的是,如果在V8中这是必要的,或者它是否会进行一些优化.