完整故事,請my other question。V8的內部 - 匿名的處理函數
基本上,我問,如果它是更有效地使用插座處理器命名功能如下代碼:
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足夠聰明地編譯一次匿名函數,並在匿名函數通常導致幾個函數實例被創建的情況下在不同的範圍內重用它們?例如,上面我所期望的action1
,action2
的處理程序要創建一次connection
事件,但處理程序,並disconnect
爲每個連接創建。在另一個問題中,這是用命名函數解決的,但如果在V8中這是必要的,或者它會做一些優化,我更感興趣。
注意,這無關與功能是有名或無名;它與您是否在每個連接上創建新功能有關。 (有關更多信息,請參閱我的答案。) – 2012-04-15 07:47:27