3

以下の関数を使用して、ツリーを深く複製します。

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のものは私のテストで最速です。なんで?そして、より良いオプションはありますか?

4

1 に答える 1

4

その後のテストからわかるように、Chrome の一部のバージョンでは JSON オプションの方が高速ですが、Safari や Firefox では高速ではありません。おそらく、他のブラウザでもミックスが見つかるでしょう。

あなたの JavaScript 複製コードは JavaScript にあります。ブラウザは自由に実装できJSON.stringifyJSON.parse高度に最適化されたマシン コードで使用できます。(必要に応じて、JavaScript を最適化されたマシン コードにコンパイルすることも無料です。) したがって、テストしたもののようなかなり単純な配列が、そうでない場合よりも JSON を介して高速になる場合があることは、それほど驚くことではありません。一部のエンジンで。いくつかのサンプル データのセット。また、他のエンジン (または他のサンプル データのセット) では、異なる結果が得られます。

また、実際の意味では、違いがそれほど大きくないことも注目に値します. JSON オプションは、Chrome 24 で示されたテストで最も近い競合他社よりも約 25% 高速です。392,000 オペレーション/秒と 521,000 オペレーション/秒の比較では、依然として 1 秒あたりのオペレーション数が少ないです。:-)

于 2013-02-26T21:59:17.530 に答える