javascript - 有什么比 Eval 更快地创建深度克隆吗?

标签 javascript node.js optimization eval

我需要创建veryBigObject 的深度克隆。 veryBigObject 需要首先通过 initVeryBigObject 进行初始化。 它是这样的:

initVeryBigObject = function(){
    veryBigObject = {};
    ...
    //Very Long Calculations to calculate the value of stuff.
    ...
    veryBigObject = {data:stuff}
}
initVeryBigObject();

var clone = JSON.parse(JSON.stringify(veryBigObject));  //slow

or

eval('createClone = function(){ return ' + JSON.stringify(veryBigObject) + '}');
var clone = createClone();  //turns out to be x3 faster

我不太喜欢 eval,但这是我认为克隆需要 init 的对象的唯一快速方法。 我错过了什么吗?

编辑:这个问题实际上并不是“克隆对象的最有效方法?”的重复。 这些方法在“克隆对象的最有效方法?”中讨论过。是关于使用相同的函数克隆不同的对象。

我的问题是关于多次克隆一个特定对象,显然,“克隆对象的最有效方法?”中讨论的方法比我的评估“策略”所建议的要慢得多。

最佳答案

告诉initVeryBigObject停止创建全局变量。如果您复制任何内容,那么您很可能会做错。

function initVeryBigObject() {
    return {
        data: stuff // If stuff comes from somewhere else and you need
                    // to clone it, go for deeper object literals.
    };
}

var veryBigObject = initVeryBigObject();
var clone = initVeryBigObject();

关于javascript - 有什么比 Eval 更快地创建深度克隆吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20794785/

相关文章:

javascript - 向初次访问网站的访客显示有用提示的最佳方式 RoR/Jquery

javascript - stripe firebase 函数设置默认付款

node.js - 如何在浏览器上本地安装 babel 并使用 ES6?

javascript - socket.io 可以处理的最大房间数是多少?

c++ - 使用 Sympy 减少计算一系列公式的计算负担

c++ - 与裸 __m128 相比,SSE vector 包装器类型的性能

javascript - 三个 JS 中的 Lithophane 效果

javascript - 如何将 "stringByEvaluatingJavaScriptFromString"传递给 webView 框架?

node.js - 如何从nodejs中的远程url创建可读流?

python - Django 数据库查询优化与模板中的 iterator()