【问题标题】:Which one performs better a function or an object in Javascript/Jquery?哪个在 Javascript/Jquery 中执行更好的函数或对象?
【发布时间】:2011-05-09 01:39:58
【问题描述】:
//Object approach
$.myutils = {
    addNumbers : function(a,b){
        //assuming a and b are integers for simplicity
        return a + b;
    }
    subNumbers : function (a,b){
        //assuming a and b are integers for simplicity
        return a - b;
    }
};
//Usage
$.myutils.addNumbers(20,10);
$.myutils.subNumbers(20,10);

//function approach
$.myutils = function()
{
    return {
        addNumbers : _addNumbers,
        subNumbers : _subNumbers
    };
    _addNumbers : function(a,b){
        //assuming a and b are integers for simplicity
        return a + b;
    }
    _subNumbers : function (a,b){
        //assuming a and b are integers for simplicity
        return a - b;
    }   
}
//Usage
$.myutils().addNumbers(20,10);
$.myutils().subNumbers(20,10);

【问题讨论】:

  • jsperf.com 救援
  • 第二个例子会给出解析错误..._addNumbers : function是无效语法。
  • @Domenic 第二种方法不能按原样工作,但 语法有效 ;-) _addNumbers 是一个标签,function 用于语句上下文。但是,代码{addNumbers: _addNumbers, ... 会抛出引用错误异常,因为_addNumbers“未定义”。
  • @pst 啊啊好点! :P

标签: jquery performance function object


【解决方案1】:

虽然这可能被认为是过早优化的情况,但请考虑语义不同并且可能首选第一种方法的情况(因为没有额外的状态存储)。

无论如何,第一个“对象”方法是“更快”(对于“更快”的某些值),因为 相同的函数相同对象的属性调用。

第二个“函数”方法会“更慢”(对于某些“更慢”的值),因为每次都会执行myutils 函数(但请记住,函数也是对象)它返回一个具有 新功能 作为属性的 新对象。因此,根据定义,必须做更多的工作。 (另外,第二种方法不会运行,我在脑子里把它翻译成“工作代码”。)

编码愉快。


根据 zerkms 的评论,我添加了一个 jsperf 测试用例:http://jsperf.com/5931661(它还包括适当的错误修复;两个“示例”实际上都被破坏了)。

【讨论】:

    【解决方案2】:

    简答:物体更快。

    您的函数返回一个对象 - 为什么它会比直接对象更快??

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多