js: 7x faster deepclone

This commit is contained in:
ed 2024-12-03 01:44:55 +00:00
parent 1a1d731043
commit c8104b6e78
3 changed files with 31 additions and 5 deletions

View file

@ -4255,9 +4255,11 @@ function sortfiles(nodes) {
if (!nodes.length)
return nodes;
var sopts = jread('fsort', jcp(dsort)),
var sopts = jread('fsort'),
dir1st = sread('dir1st') !== '0';
sopts = sopts && sopts.length ? sopts : jcp(dsort);
var collator = !clgot(ebi('nsort'), 'on') ? null :
new Intl.Collator([], {numeric: true});

View file

@ -17,8 +17,8 @@ var chromedbg = function () { console.log(arguments); }
var dbg = function () { };
// replace dbg with the real deal here or in the console:
// dbg = chromedbg
// dbg = console.log
// dbg = chromedbg;
// dbg = console.log;
// dodge browser issues

View file

@ -578,7 +578,9 @@ function yscroll() {
function showsort(tab) {
var v, vn, v1, v2, th = tab.tHead,
sopts = jread('fsort', jcp(dsort));
sopts = jread('fsort');
sopts = sopts && sopts.length ? sopts : dsort;
th && (th = th.rows[0]) && (th = th.cells);
@ -979,11 +981,33 @@ function apop(arr, v) {
}
function jcp(obj) {
function jcp1(obj) {
return JSON.parse(JSON.stringify(obj));
}
function jcp2(src) {
if (Array.isArray(src)) {
var ret = [];
for (var a = 0; a < src.length; ++a) {
var sub = src[a];
ret.push((sub === null) ? sub : (sub instanceof Date) ? new Date(sub.valueOf()) : (typeof sub === 'object') ? jcp2(sub) : sub);
}
} else {
var ret = {};
for (var key in src) {
var sub = src[key];
ret[key] = sub === null ? sub : (sub instanceof Date) ? new Date(sub.valueOf()) : (typeof sub === 'object') ? jcp2(sub) : sub;
}
}
return ret;
};
// jcp1 50% faster on android-chrome, jcp2 7x everywhere else
var jcp = MOBILE && CHROME ? jcp1 : jcp2;
function sdrop(key) {
try {
STG.removeItem(key);