workaround v8 performance quirks

This commit is contained in:
alexlamsl 2021-12-08 21:14:14 +08:00
parent bc27966a19
commit 97d4dab914

View File

@ -6412,7 +6412,7 @@ Compressor.prototype.compress = function(node) {
Object.keys(assign_in_use).forEach(function(id) {
var assigns = assign_in_use[id];
if (!assigns) {
delete assign_in_use[id];
assign_in_use[id] = undefined;
return;
}
assigns = assigns.reduce(function(in_use, assigns) {
@ -6433,7 +6433,7 @@ Compressor.prototype.compress = function(node) {
if (assigns.length == in_use.length) {
assign_in_use[id] = in_use;
} else {
delete assign_in_use[id];
assign_in_use[id] = undefined;
}
});
// pass 3: we should drop declarations not in_use
@ -6834,10 +6834,10 @@ Compressor.prototype.compress = function(node) {
}
case 1:
if (tail.length == 0) {
var id = head[0].name.definition().id;
if (id in for_ins) {
var for_in = for_ins[head[0].name.definition().id];
if (for_in) {
node.definitions = head;
for_ins[id].init = node;
for_in.init = node;
break;
}
}
@ -6932,7 +6932,7 @@ Compressor.prototype.compress = function(node) {
var def = sym.definition();
if (def.id in in_use_ids) return;
log(sym, "Dropping unused loop variable {name}");
if (for_ins[def.id] === node) delete for_ins[def.id];
if (for_ins[def.id] === node) for_ins[def.id] = undefined;
var body = [];
var value = node.object.drop_side_effect_free(compressor);
if (value) {
@ -7115,7 +7115,7 @@ Compressor.prototype.compress = function(node) {
if (node instanceof AST_ForIn) {
if (node.init instanceof AST_SymbolRef && scope === self) {
var id = node.init.definition().id;
if (!(id in for_ins)) for_ins[id] = node;
if (!for_ins[id]) for_ins[id] = node;
}
if (!drop_vars || !compressor.option("loops")) return;
if (!is_empty(node.body)) return;