Voor een van m'n nieuwe componenten, m'n serviceLog, moet ik een heel groot object (ongeveer 2Mb op het moment, maar kan ook groter worden) clonen.
De standaard recursieve clone scripts werken niet meer omdat ze de browser bevriezen.
Ik heb iets asynchroons nodig, maar ik krijg het niet goed aan het werk..
Hebben jullie mischien ideeen?
De standaard recursieve clone scripts werken niet meer omdat ze de browser bevriezen.
Ik heb iets asynchroons nodig, maar ik krijg het niet goed aan het werk..
Hebben jullie mischien ideeen?
Code:
rajmv.cloneObjectAsync({
original : errors[host][lbl],
origin : { errorsID : errorsID, errorsDivID : errorsDivID, host : host, lbl : lbl },
statusCallback : rajmv.graphs.raphael.cloneObjectAsync_statusCallback,
resultCallback : rajmv.graphs.raphael.cloneObjectAsync_resultCallback
});
Code:
cloneObjectAsync : function (cmd) {
var rscc = rajmv.settings.cloneObjectAsync.commands;
var cmdIdx = rscc.length;
rscc[cmdIdx] = cmd;
cmd.result = {};
cmd.pr = cmd.result;
cmd.level = 0;
if (!cmd.po) /*pointer original*/ cmd.po = cmd.original;
if (!cmd.countKeys) cmd.countKeys=1;
rajmv.cloneObjectAsync_do (cmd, cmd.po, cmd.pr, cmd.level);
},
cloneObjectAsync_do : function (cmd, oldPO, oldPR, oldLevel) {
if (cmd.countKeys/193===Math.round(cmd.countKeys/193)) {
setTimeout (function () {
cmd.countKeys++;
rajmv.cloneObjectAsync_do(cmd,oldPO,oldPR,oldLevel); // prevents CPU rapes and crashes when copying multi-meg objects
}, 400);
} else {
for (var k in cmd.po) {
cmd.countKeys++;
if (typeof cmd.po[k]=='object' && cmd.po[k] !== null) {
var oPO = cmd.po;
var oPR = cmd.pr;
var oLevel = cmd.level;
cmd.po = cmd.po[k];
cmd.pr[k] = (cmd.po[k] instanceof Array) ? [] : {};
cmd.pr = cmd.pr[k];
cmd.level++;
rajmv.cloneObjectAsync_do (cmd, oPO, oPR, oLevel);
} else {
cmd.pr[k] = cmd.po[k];
}
}
};
cmd.po = oldPO;
cmd.pr = oldPR;
cmd.level = oldLevel;
if (cmd.level==0) cmd.resultCallback (cmd);
},
Laatst bewerkt: