为什么JSON比`for in`和`map`克隆对象更快?

时间:2013-02-26 21:50:17

标签: javascript json performance copy clone

使用以下功能深度克隆树

function clone_map(obj){
    return obj.map(function(val){
        return typeof(val) == "object" ? clone_map(val) : val;
    });
};
function clone_forin(obj){
    var result = [];
    for (var key in obj){
        var val = obj[key];
        result.push(typeof(val) == "object" ? clone_forin(val) : val);
    };
    return result;
};
function clone_json(obj){
    return JSON.parse(JSON.stringify(obj));
};

JSON one是最快的on my tests。为什么?还有更好的选择吗?

1 个答案:

答案 0 :(得分:4)

从后续测试中可以看出,JSON选项在某些版本的Chrome上更快,但在Safari或Firefox上却没有。您可能也会在其他浏览器中找到混合。

您的JavaScript克隆代码使用JavaScript。浏览器可以在高度优化的机器代码中自由实施JSON.stringifyJSON.parse。 (如果感觉需要,也可以自由地将JavaScript编译成优化的机器代码。)因此,有时候,一个相当简单的数组(例如您测试过的那个)可能会更快JSON比不。在一些引擎上。有一些样本数据集。而在其他引擎(或其他样本数据集)上,会有不同的结果。

值得注意的是,差异并不大,不是任何现实世界的意义。在Chrome 24中显示的测试中,JSON选项比最接近的竞争对手快25%左右。但是每次单独的迭代都非常快,以至于它没有真正的区别。 392k操作/秒与521k操作/秒,它仍然是操作/秒的流量。 : - )