【发布时间】:2012-04-15 07:24:57
【问题描述】:
有关完整故事,请查看my other question。
基本上,我问过在套接字处理程序中为以下代码使用命名函数是否更有效:
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 事件创建一次处理程序,但为每个连接创建action1、action2 和disconnect 的处理程序。在另一个问题中,这是通过命名函数解决的,但我更感兴趣的是在 V8 中是否需要这样做,或者它是否会进行一些优化。
【问题讨论】:
-
请注意,这与被命名或匿名的函数无关;它与您是否在每个连接上创建新功能有关。 (有关更多信息,请参阅我的答案。)
标签: javascript v8