2017-12-18 86 views
0

我的问题是关系到下面的代码 -哪个代码在JavaScript中表现更好?

方案1:

var queue = []; 
var busy = false; 

exports.getAProfile = function (params, cb) { 
    queue.push({params: params, cb: cb}); 
    if (!busy) { 
     checkQueue(function (c, next) { 
      service.getAProfileNow(c.params, function (err, res) { 
       c.cb(err,res); 
       next(); 
      }); 
     }); 
    } 
} 

function checkQueue(actualTask) { 
    var c = queue.shift(); 
    if (c) { 
     busy = true; 
     actualTask(c, function() { 
      checkQueue(actualTask); 
     }) 
     return queue.length; 
    } else { 
     busy = false; 
     return queue.length; 
    } 
} 

方案2:

var queue = []; 
var busy = false; 

var actualTask = function (c, next) { 
    service.getAProfileNow(c.params, function (err, res) { 
     c.cb(err,res); 
     next(); 
    }); 
} 

exports.getAProfile = function (params, cb) { 
    queue.push({params: params, cb: cb}); 
    if (!busy) { 
     checkQueue(); 
    } 
} 

function checkQueue() { 
    var c = queue.shift(); 
    if (c) { 
     busy = true; 
     actualTask(c, function() { 
      checkQueue(actualTask); 
     }) 
     return queue.length; 
    } else { 
     busy = false; 
     return queue.length; 
    } 
} 

差异在这两个代码 -

  • 函数actualTask是(我猜)在第一个场景中定义了很多次,而在第二个场景中它只定义了一次。

是'我解释'是正确的吗?那哪一个更好?为什么?两种代码的性能是不同的?

注意:service模块在代码中是require-d,它只查询数据库。

+6

[哪个更快?](https://ericlippert.com/2012/12/17/performance-rant/) –

+1

这个(和浏览器devtools中的性能选项卡)可能是一个很有用的工具来试用它:https ://jsperf.com/ – helb

回答

-1

只定义一次函数不会使性能或执行速度更快。它只会减少你的代码的文件大小,并使你的代码形成得很好。在这两种情况下,函数都必须跳转到过程调用。

+2

这并没有任何意义 –