Skip to content

Commit 55225cb

Browse files
authoredJan 26, 2023
refactor(es/minifier): Merge cond_init with reassigned (#6850)
**Description:** And optimize the following situation ```js export function genElement(el, state) { if ('slot' === el.tag) return el1 = el, genChildren(el1); if (el.component) { var el1 return 999; } } ``` which rarely happens in hand written JS, but is often generated by swc merge variable pass.
1 parent 1bf9b37 commit 55225cb

File tree

10 files changed

+51
-60
lines changed

10 files changed

+51
-60
lines changed
 

‎crates/swc_ecma_minifier/src/compress/optimize/inline.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ where
7777
return;
7878
}
7979

80-
if usage.cond_init || usage.used_above_decl {
80+
if usage.used_above_decl {
8181
log_abort!("inline: [x] It's cond init or used before decl",);
8282
return;
8383
}
@@ -188,7 +188,7 @@ where
188188
.vars
189189
.get(&id.to_id())
190190
.filter(|a| {
191-
!a.reassigned() && a.declared && !a.cond_init && {
191+
!a.reassigned() && a.declared && {
192192
// Function declarations are hoisted
193193
//
194194
// As we copy expressions, this can cause a problem.
@@ -360,10 +360,7 @@ where
360360

361361
Expr::Ident(id) if !id.eq_ignore_span(ident) => {
362362
if let Some(init_usage) = self.data.vars.get(&id.to_id()) {
363-
if init_usage.reassigned()
364-
|| !init_usage.declared
365-
|| init_usage.cond_init
366-
{
363+
if init_usage.reassigned() || !init_usage.declared {
367364
return;
368365
}
369366
}

‎crates/swc_ecma_minifier/src/program_data.rs

+19-25
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@ pub(crate) struct VarUsageInfo {
6464
/// The number of direct reference to this identifier.
6565
pub(crate) ref_count: u32,
6666

67-
/// `true` if a variable is conditionally initialized.
68-
pub(crate) cond_init: bool,
69-
7067
/// `false` if it's only used.
7168
pub(crate) declared: bool,
7269
pub(crate) declared_count: u32,
@@ -86,9 +83,8 @@ pub(crate) struct VarUsageInfo {
8683
/// - Update is counted as usage, but assign is not
8784
pub(crate) usage_count: u32,
8885

89-
/// The variable itself is modified.
90-
reassigned_with_assignment: bool,
91-
reassigned_with_var_decl: bool,
86+
/// The variable itself is assigned after reference.
87+
reassigned: bool,
9288
/// The variable itself or a property of it is modified.
9389
pub(crate) mutated: bool,
9490

@@ -140,7 +136,6 @@ impl Default for VarUsageInfo {
140136
Self {
141137
inline_prevented: Default::default(),
142138
ref_count: Default::default(),
143-
cond_init: Default::default(),
144139
declared: Default::default(),
145140
declared_count: Default::default(),
146141
declared_as_fn_param: Default::default(),
@@ -149,8 +144,7 @@ impl Default for VarUsageInfo {
149144
assign_count: Default::default(),
150145
mutation_by_call_count: Default::default(),
151146
usage_count: Default::default(),
152-
reassigned_with_assignment: Default::default(),
153-
reassigned_with_var_decl: Default::default(),
147+
reassigned: Default::default(),
154148
mutated: Default::default(),
155149
has_property_access: Default::default(),
156150
has_property_mutation: Default::default(),
@@ -186,8 +180,7 @@ impl VarUsageInfo {
186180
}
187181

188182
pub(crate) fn reassigned(&self) -> bool {
189-
self.reassigned_with_assignment
190-
|| self.reassigned_with_var_decl
183+
self.reassigned
191184
|| (u32::from(self.var_initialized)
192185
+ u32::from(self.declared_as_catch_param)
193186
+ u32::from(self.declared_as_fn_param)
@@ -241,25 +234,27 @@ impl Storage for ProgramData {
241234
Entry::Occupied(mut e) => {
242235
e.get_mut().inline_prevented |= var_info.inline_prevented;
243236

244-
e.get_mut().cond_init |= if !inited && e.get().var_initialized {
245-
true
246-
} else {
247-
var_info.cond_init
248-
};
249237
if var_info.var_initialized {
250238
if e.get().var_initialized || e.get().ref_count > 0 {
251239
e.get_mut().assign_count += 1;
252-
e.get_mut().reassigned_with_assignment = true;
240+
e.get_mut().reassigned = true;
253241
} else {
254242
// If it is referred outside child scope, it will
255243
// be marked as var_initialized false
256244
e.get_mut().var_initialized = true;
257245
}
246+
} else {
247+
// If it is inited in some other child scope, but referenced in
248+
// current child scope
249+
if !inited && e.get().var_initialized && var_info.ref_count > 0 {
250+
e.get_mut().reassigned = true
251+
}
258252
}
253+
259254
e.get_mut().ref_count += var_info.ref_count;
260255

261-
e.get_mut().reassigned_with_assignment |= var_info.reassigned_with_assignment;
262-
e.get_mut().reassigned_with_var_decl |= var_info.reassigned_with_var_decl;
256+
e.get_mut().reassigned |= var_info.reassigned;
257+
263258
e.get_mut().mutated |= var_info.mutated;
264259

265260
e.get_mut().has_property_access |= var_info.has_property_access;
@@ -359,7 +354,7 @@ impl Storage for ProgramData {
359354
}
360355

361356
v.mutated = true;
362-
v.reassigned_with_var_decl = true;
357+
v.reassigned = true;
363358
v.assign_count += 1;
364359
}
365360

@@ -458,8 +453,8 @@ impl VarDataLike for VarUsageInfo {
458453
self.mutated = true;
459454
}
460455

461-
fn mark_reassigned_with_assign(&mut self) {
462-
self.reassigned_with_assignment = true;
456+
fn mark_reassigned(&mut self) {
457+
self.reassigned = true;
463458
}
464459

465460
fn add_infects_to(&mut self, other: Access) {
@@ -625,11 +620,10 @@ impl ProgramData {
625620
if is_first {
626621
e.ref_count += 1;
627622
if !inited && e.var_initialized {
628-
e.cond_init = true;
629623
if !is_modify {
630624
e.var_initialized = false;
631625
e.assign_count += 1;
632-
e.reassigned_with_assignment = true
626+
e.reassigned = true
633627
}
634628
}
635629
}
@@ -656,7 +650,7 @@ impl ProgramData {
656650
e.assign_count -= 1;
657651
e.var_initialized = true;
658652
} else {
659-
e.reassigned_with_assignment = true
653+
e.reassigned = true
660654
}
661655
}
662656

‎crates/swc_ecma_minifier/tests/benches-full/echarts.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -26853,8 +26853,8 @@
2685326853
mousemove: function(e) {
2685426854
var x = e.offsetX, y = e.offsetY, localCursorPoint = this.group.transformCoordToLocal(x, y);
2685526855
if (!function(controller, e, localCursorPoint) {
26856-
if (!(!controller._brushType || (controller1 = controller, x = e.offsetX, y = e.offsetY, zr = controller1._zr, x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight()))) {
26857-
var controller1, x, y, zr, zr1 = controller._zr, covers = controller._covers, currPanel = getPanelByPoint(controller, e, localCursorPoint);
26856+
if (!(!controller._brushType || (x = e.offsetX, y = e.offsetY, zr = controller._zr, x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight()))) {
26857+
var x, y, zr, zr1 = controller._zr, covers = controller._covers, currPanel = getPanelByPoint(controller, e, localCursorPoint);
2685826858
if (!controller._dragging) for(var i = 0; i < covers.length; i++){
2685926859
var brushOption = covers[i].__brushOption;
2686026860
if (currPanel && (!0 === currPanel || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) return;
@@ -36191,10 +36191,10 @@
3619136191
'parallel' === seriesModel.subType ? (coordSys = seriesModel.coordinateSystem, hasBrushExists = hasBrushExists || coordSys.hasAxisBrushed(), linkOthers(seriesIndex) && coordSys.eachActiveState(seriesModel.getData(), function(activeState, dataIndex) {
3619236192
'active' === activeState && (selectedDataIndexForLink[dataIndex] = 1);
3619336193
})) : function(seriesModel, seriesIndex, rangeInfoList) {
36194-
if (!(!seriesModel.brushSelector || (brushModel1 = brushModel, seriesIndex1 = seriesIndex, null != (seriesIndices = brushModel1.option.seriesIndex) && 'all' !== seriesIndices && (isArray(seriesIndices) ? 0 > indexOf(seriesIndices, seriesIndex1) : seriesIndex1 !== seriesIndices))) && (each(areas, function(area) {
36194+
if (!(!seriesModel.brushSelector || null != (seriesIndices = brushModel.option.seriesIndex) && 'all' !== seriesIndices && (isArray(seriesIndices) ? 0 > indexOf(seriesIndices, seriesIndex) : seriesIndex !== seriesIndices)) && (each(areas, function(area) {
3619536195
brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel) && rangeInfoList.push(area), hasBrushExists = hasBrushExists || brushed(rangeInfoList);
3619636196
}), linkOthers(seriesIndex) && brushed(rangeInfoList))) {
36197-
var brushModel1, seriesIndex1, seriesIndices, data_1 = seriesModel.getData();
36197+
var seriesIndices, data_1 = seriesModel.getData();
3619836198
data_1.each(function(dataIndex) {
3619936199
checkInRange(seriesModel, rangeInfoList, data_1, dataIndex) && (selectedDataIndexForLink[dataIndex] = 1);
3620036200
});
@@ -40856,8 +40856,8 @@
4085640856
return subOption = exprOption.not, errMsg = '', errMsg = makePrintable('"not" condition should only be `not: {}`.', 'Illegal condition:', exprOption), isObject(val = subOption) && !isArrayLike(val) || throwError(errMsg), (cond = new NotConditionInternal()).child = parseOption(subOption, getters), cond.child || throwError(errMsg), cond;
4085740857
}
4085840858
return function(exprOption, getters) {
40859-
for(var valueGetterParam = getters.prepareGetValue(exprOption), subCondList = [], exprKeys = keys(exprOption), parserName = exprOption.parser, valueParser = parserName ? (type = parserName, valueParserMap.get(type)) : null, i = 0; i < exprKeys.length; i++){
40860-
var type, keyRaw = exprKeys[i];
40859+
for(var valueGetterParam = getters.prepareGetValue(exprOption), subCondList = [], exprKeys = keys(exprOption), parserName = exprOption.parser, valueParser = parserName ? valueParserMap.get(parserName) : null, i = 0; i < exprKeys.length; i++){
40860+
var keyRaw = exprKeys[i];
4086140861
if (!('parser' === keyRaw || getters.valueGetterAttrMap.get(keyRaw))) {
4086240862
var op = hasOwn(RELATIONAL_EXPRESSION_OP_ALIAS_MAP, keyRaw) ? RELATIONAL_EXPRESSION_OP_ALIAS_MAP[keyRaw] : keyRaw, condValueRaw = exprOption[keyRaw], condValueParsed = valueParser ? valueParser(condValueRaw) : condValueRaw, evaluator = ('eq' === op || 'ne' === op ? new FilterEqualityComparator('eq' === op, condValueParsed) : hasOwn(ORDER_COMPARISON_OP_MAP, op) ? new FilterOrderComparator(op, condValueParsed) : null) || 'reg' === op && new RegExpEvaluator(condValueParsed);
4086340863
evaluator || throwError(makePrintable('Illegal relational operation: "' + keyRaw + '" in condition:', exprOption)), subCondList.push(evaluator);

‎crates/swc_ecma_minifier/tests/benches-full/lodash.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -627,9 +627,9 @@
627627
if (!isObject(value)) return value;
628628
var isArr = isArray(value);
629629
if (isArr) {
630-
if (length = (array = value).length, result1 = new array.constructor(length), length && 'string' == typeof array[0] && hasOwnProperty.call(array, 'index') && (result1.index = array.index, result1.input = array.input), result = result1, !isDeep) return copyArray(value, result);
630+
if (length = value.length, result1 = new value.constructor(length), length && 'string' == typeof value[0] && hasOwnProperty.call(value, 'index') && (result1.index = value.index, result1.input = value.input), result = result1, !isDeep) return copyArray(value, result);
631631
} else {
632-
var array, length, result1, object1, object2, object3, tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
632+
var length, result1, object1, object2, object3, tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
633633
if (isBuffer(value)) return cloneBuffer(value, isDeep);
634634
if (tag == objectTag || tag == argsTag || isFunc && !object) {
635635
if (result = isFlat || isFunc ? {} : initCloneObject(value), !isDeep) return isFlat ? (object1 = (object3 = result) && copyObject(value, keysIn(value), object3), copyObject(value, getSymbolsIn(value), object1)) : (object2 = baseAssign(result, value), copyObject(value, getSymbols(value), object2));

‎crates/swc_ecma_minifier/tests/benches-full/vue.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -2626,14 +2626,14 @@
26262626
var id = "__transition-" + this._uid + "-";
26272627
child.key = null == child.key ? child.isComment ? id + 'comment' : id + child.tag : isPrimitive(child.key) ? 0 === String(child.key).indexOf(id) ? child.key : id + child.key : child.key;
26282628
var data = (child.data || (child.data = {})).transition = extractTransitionData(this), oldRawChild = this._vnode, oldChild = getRealChild(oldRawChild);
2629-
if (child.data.directives && child.data.directives.some(isVShowDirective) && (child.data.show = !0), oldChild && oldChild.data && (child1 = child, (oldChild1 = oldChild).key !== child1.key || oldChild1.tag !== child1.tag) && !isAsyncPlaceholder(oldChild) && !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)) {
2629+
if (child.data.directives && child.data.directives.some(isVShowDirective) && (child.data.show = !0), oldChild && oldChild.data && (oldChild.key !== child.key || oldChild.tag !== child.tag) && !isAsyncPlaceholder(oldChild) && !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)) {
26302630
var oldData = oldChild.data.transition = extend({}, data);
26312631
if ('out-in' === mode) return this._leaving = !0, mergeVNodeHook(oldData, 'afterLeave', function() {
26322632
this$1._leaving = !1, this$1.$forceUpdate();
26332633
}), placeholder(h, rawChild);
26342634
if ('in-out' === mode) {
26352635
if (isAsyncPlaceholder(child)) return oldRawChild;
2636-
var child1, oldChild1, delayedLeave, performLeave = function() {
2636+
var delayedLeave, performLeave = function() {
26372637
delayedLeave();
26382638
};
26392639
mergeVNodeHook(data, 'afterEnter', performLeave), mergeVNodeHook(data, 'enterCancelled', performLeave), mergeVNodeHook(oldData, 'delayLeave', function(leave) {
@@ -3092,17 +3092,17 @@
30923092
if (el.for && !el.forProcessed) return genFor(el, state);
30933093
if (el.if && !el.ifProcessed) return genIf(el, state);
30943094
if ('template' === el.tag && !el.slotTarget && !state.pre) return genChildren(el, state) || 'void 0';
3095-
if ('slot' === el.tag) return el1 = el, state1 = state, res = "_t(" + (el1.slotName || '"default"') + ((children = genChildren(el1, state1)) ? "," + children : ''), attrs = el1.attrs || el1.dynamicAttrs ? genProps((el1.attrs || []).concat(el1.dynamicAttrs || []).map(function(attr) {
3095+
if ('slot' === el.tag) return res = "_t(" + (el.slotName || '"default"') + ((children = genChildren(el, state)) ? "," + children : ''), attrs = el.attrs || el.dynamicAttrs ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function(attr) {
30963096
return {
30973097
name: camelize(attr.name),
30983098
value: attr.value,
30993099
dynamic: attr.dynamic
31003100
};
3101-
})) : null, bind$$1 = el1.attrsMap['v-bind'], (attrs || bind$$1) && !children && (res += ",null"), attrs && (res += "," + attrs), bind$$1 && (res += (attrs ? '' : ',null') + "," + bind$$1), res + ')';
3102-
if (el.component) componentName = el.component, el2 = el, state2 = state, children1 = el2.inlineTemplate ? null : genChildren(el2, state2, !0), code = "_c(" + componentName + "," + genData$2(el2, state2) + (children1 ? "," + children1 : '') + ")";
3101+
})) : null, bind$$1 = el.attrsMap['v-bind'], (attrs || bind$$1) && !children && (res += ",null"), attrs && (res += "," + attrs), bind$$1 && (res += (attrs ? '' : ',null') + "," + bind$$1), res + ')';
3102+
if (el.component) componentName = el.component, children1 = el.inlineTemplate ? null : genChildren(el, state, !0), code = "_c(" + componentName + "," + genData$2(el, state) + (children1 ? "," + children1 : '') + ")";
31033103
else {
31043104
(!el.plain || el.pre && state.maybeComponent(el)) && (data = genData$2(el, state));
3105-
var el1, state1, children, res, attrs, bind$$1, code, componentName, el2, state2, children1, data, children2 = el.inlineTemplate ? null : genChildren(el, state, !0);
3105+
var children, res, attrs, bind$$1, code, componentName, children1, data, children2 = el.inlineTemplate ? null : genChildren(el, state, !0);
31063106
code = "_c('" + el.tag + "'" + (data ? "," + data : '') + (children2 ? "," + children2 : '') + ")";
31073107
}
31083108
for(var i = 0; i < state.transforms.length; i++)code = state.transforms[i](el, code);

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jan 26, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 55225cb Previous: 58208ef Ratio
es/full/bugs-1 302235 ns/iter (± 9774) 304042 ns/iter (± 7616) 0.99
es/full/minify/libraries/antd 1743334909 ns/iter (± 59800373) 1697341209 ns/iter (± 33496931) 1.03
es/full/minify/libraries/d3 298823589 ns/iter (± 6011514) 310677891 ns/iter (± 11787282) 0.96
es/full/minify/libraries/echarts 1247547706 ns/iter (± 26870982) 1291326383 ns/iter (± 26789554) 0.97
es/full/minify/libraries/jquery 89674082 ns/iter (± 693929) 89475103 ns/iter (± 1481618) 1.00
es/full/minify/libraries/lodash 106094583 ns/iter (± 1311562) 106076192 ns/iter (± 2230072) 1.00
es/full/minify/libraries/moment 52539498 ns/iter (± 519504) 53662734 ns/iter (± 764142) 0.98
es/full/minify/libraries/react 18850080 ns/iter (± 75178) 19470713 ns/iter (± 457939) 0.97
es/full/minify/libraries/terser 249161017 ns/iter (± 3855517) 254593056 ns/iter (± 2800410) 0.98
es/full/minify/libraries/three 434630380 ns/iter (± 7658490) 458670387 ns/iter (± 11587398) 0.95
es/full/minify/libraries/typescript 3166638342 ns/iter (± 27949171) 3311654190 ns/iter (± 27382124) 0.96
es/full/minify/libraries/victory 651743769 ns/iter (± 17017566) 736094593 ns/iter (± 24128954) 0.89
es/full/minify/libraries/vue 129512587 ns/iter (± 1877843) 133354184 ns/iter (± 4396160) 0.97
es/full/codegen/es3 26123 ns/iter (± 130) 25980 ns/iter (± 56) 1.01
es/full/codegen/es5 26150 ns/iter (± 76) 25987 ns/iter (± 80) 1.01
es/full/codegen/es2015 26110 ns/iter (± 69) 26036 ns/iter (± 47) 1.00
es/full/codegen/es2016 26110 ns/iter (± 71) 26027 ns/iter (± 69) 1.00
es/full/codegen/es2017 26122 ns/iter (± 32) 26061 ns/iter (± 81) 1.00
es/full/codegen/es2018 26104 ns/iter (± 50) 26043 ns/iter (± 82) 1.00
es/full/codegen/es2019 26137 ns/iter (± 48) 26031 ns/iter (± 65) 1.00
es/full/codegen/es2020 26094 ns/iter (± 62) 26007 ns/iter (± 61) 1.00
es/full/all/es3 169043052 ns/iter (± 3996681) 173935215 ns/iter (± 1912952) 0.97
es/full/all/es5 161863222 ns/iter (± 2557285) 164247729 ns/iter (± 1816402) 0.99
es/full/all/es2015 120940300 ns/iter (± 456621) 129516962 ns/iter (± 2479380) 0.93
es/full/all/es2016 120153007 ns/iter (± 547216) 124315461 ns/iter (± 1871006) 0.97
es/full/all/es2017 120252654 ns/iter (± 807205) 124771175 ns/iter (± 2085349) 0.96
es/full/all/es2018 117492828 ns/iter (± 877542) 120135938 ns/iter (± 1279695) 0.98
es/full/all/es2019 117615109 ns/iter (± 459442) 120886051 ns/iter (± 1643074) 0.97
es/full/all/es2020 112370864 ns/iter (± 1082614) 116367373 ns/iter (± 1376361) 0.97
es/full/parser 530874 ns/iter (± 7863) 541588 ns/iter (± 7687) 0.98
es/full/base/fixer 21742 ns/iter (± 61) 22266 ns/iter (± 40) 0.98
es/full/base/resolver_and_hygiene 79289 ns/iter (± 99) 79799 ns/iter (± 178) 0.99
serialization of ast node 145 ns/iter (± 0) 145 ns/iter (± 0) 1
serialization of serde 130 ns/iter (± 0) 129 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 28741770 ns/iter (± 116080) 27784144 ns/iter (± 70407) 1.03
css/visitor/compare/clone 2077779 ns/iter (± 16202) 2044344 ns/iter (± 21104) 1.02
css/visitor/compare/visit_mut_span 2268354 ns/iter (± 18323) 2255976 ns/iter (± 9404) 1.01
css/visitor/compare/visit_mut_span_panic 2320678 ns/iter (± 13467) 2291174 ns/iter (± 4535) 1.01
css/visitor/compare/fold_span 3016520 ns/iter (± 19218) 3042259 ns/iter (± 22444) 0.99
css/visitor/compare/fold_span_panic 3178919 ns/iter (± 16337) 3169527 ns/iter (± 16426) 1.00
css/lexer/bootstrap_5_1_3 5178988 ns/iter (± 39521) 5175356 ns/iter (± 7874) 1.00
css/lexer/foundation_6_7_4 4358701 ns/iter (± 2115) 4346645 ns/iter (± 1062) 1.00
css/lexer/tailwind_3_1_1 825125 ns/iter (± 389) 827865 ns/iter (± 698) 1.00
css/parser/bootstrap_5_1_3 21543243 ns/iter (± 53640) 21541748 ns/iter (± 37949) 1.00
css/parser/foundation_6_7_4 17227954 ns/iter (± 23947) 17234952 ns/iter (± 19564) 1.00
css/parser/tailwind_3_1_1 3314565 ns/iter (± 9968) 3320197 ns/iter (± 3392) 1.00
es/codegen/colors 342982 ns/iter (± 190432) 333957 ns/iter (± 185971) 1.03
es/codegen/large 1178147 ns/iter (± 604680) 1195267 ns/iter (± 603067) 0.99
es/codegen/with-parser/colors 49034 ns/iter (± 428) 48816 ns/iter (± 611) 1.00
es/codegen/with-parser/large 535245 ns/iter (± 2249) 536975 ns/iter (± 901) 1.00
es/minify/libraries/antd 1491228097 ns/iter (± 46485336) 1484395715 ns/iter (± 35712197) 1.00
es/minify/libraries/d3 277804916 ns/iter (± 14773888) 249546710 ns/iter (± 7816901) 1.11
es/minify/libraries/echarts 1128606675 ns/iter (± 19235502) 1107616059 ns/iter (± 19150725) 1.02
es/minify/libraries/jquery 77955901 ns/iter (± 796024) 77964967 ns/iter (± 970778) 1.00
es/minify/libraries/lodash 95347723 ns/iter (± 1217015) 94835303 ns/iter (± 1346567) 1.01
es/minify/libraries/moment 45832459 ns/iter (± 230165) 45699776 ns/iter (± 724477) 1.00
es/minify/libraries/react 16921387 ns/iter (± 66769) 17065892 ns/iter (± 207745) 0.99
es/minify/libraries/terser 209223687 ns/iter (± 1639451) 218694150 ns/iter (± 5395643) 0.96
es/minify/libraries/three 371286156 ns/iter (± 14958176) 414150589 ns/iter (± 28586603) 0.90
es/minify/libraries/typescript 2733650228 ns/iter (± 22385150) 2798500630 ns/iter (± 31168072) 0.98
es/minify/libraries/victory 573551461 ns/iter (± 16916156) 605112117 ns/iter (± 17534551) 0.95
es/minify/libraries/vue 116301425 ns/iter (± 1176696) 119519259 ns/iter (± 2295847) 0.97
es/visitor/compare/clone 2397160 ns/iter (± 2271) 2392669 ns/iter (± 28008) 1.00
es/visitor/compare/visit_mut_span 2780296 ns/iter (± 6515) 2768821 ns/iter (± 4272) 1.00
es/visitor/compare/visit_mut_span_panic 2817583 ns/iter (± 14854) 2824949 ns/iter (± 6127) 1.00
es/visitor/compare/fold_span 3895674 ns/iter (± 4712) 3953867 ns/iter (± 20775) 0.99
es/visitor/compare/fold_span_panic 4233520 ns/iter (± 79690) 4104881 ns/iter (± 15902) 1.03
es/lexer/colors 17294 ns/iter (± 113) 17211 ns/iter (± 4) 1.00
es/lexer/angular 8276056 ns/iter (± 4399) 8248286 ns/iter (± 5745) 1.00
es/lexer/backbone 1083408 ns/iter (± 459) 1078069 ns/iter (± 364) 1.00
es/lexer/jquery 5988284 ns/iter (± 865) 5964112 ns/iter (± 1937) 1.00
es/lexer/jquery mobile 9236220 ns/iter (± 70167) 9210186 ns/iter (± 8822) 1.00
es/lexer/mootools 4693371 ns/iter (± 2700) 4670837 ns/iter (± 5924) 1.00
es/lexer/underscore 905069 ns/iter (± 356) 898599 ns/iter (± 305) 1.01
es/lexer/three 28127832 ns/iter (± 28768) 27969090 ns/iter (± 21304) 1.01
es/lexer/yui 5071789 ns/iter (± 2452) 5046272 ns/iter (± 1202) 1.01
es/parser/colors 31004 ns/iter (± 133) 31042 ns/iter (± 142) 1.00
es/parser/angular 16485455 ns/iter (± 231062) 15791870 ns/iter (± 222657) 1.04
es/parser/backbone 2352941 ns/iter (± 13750) 2348126 ns/iter (± 9130) 1.00
es/parser/jquery 13071436 ns/iter (± 115310) 12681005 ns/iter (± 93289) 1.03
es/parser/jquery mobile 21548639 ns/iter (± 352683) 19954730 ns/iter (± 591955) 1.08
es/parser/mootools 10098583 ns/iter (± 199062) 9688800 ns/iter (± 22569) 1.04
es/parser/underscore 1987343 ns/iter (± 10198) 1982540 ns/iter (± 12973) 1.00
es/parser/three 59748286 ns/iter (± 1739294) 59920268 ns/iter (± 1382470) 1.00
es/parser/yui 9606975 ns/iter (± 94406) 9640992 ns/iter (± 87145) 1.00
es/preset-env/usage/builtin_type 140338 ns/iter (± 32088) 140481 ns/iter (± 31474) 1.00
es/preset-env/usage/property 21550 ns/iter (± 90) 21987 ns/iter (± 62) 0.98
es/resolver/typescript 125227431 ns/iter (± 4204517) 119216796 ns/iter (± 1714393) 1.05
es/fixer/typescript 98540694 ns/iter (± 4053826) 94241182 ns/iter (± 1690940) 1.05
es/hygiene/typescript 203697427 ns/iter (± 3965394) 200271782 ns/iter (± 2469436) 1.02
es/resolver_with_hygiene/typescript 341019916 ns/iter (± 2061048) 338899141 ns/iter (± 5760799) 1.01
es/visitor/base-perf/module_clone 75476 ns/iter (± 907) 75065 ns/iter (± 1405) 1.01
es/visitor/base-perf/fold_empty 85552 ns/iter (± 1986) 85216 ns/iter (± 2169) 1.00
es/visitor/base-perf/fold_noop_impl_all 85895 ns/iter (± 1990) 86372 ns/iter (± 1947) 0.99
es/visitor/base-perf/fold_noop_impl_vec 85233 ns/iter (± 1003) 87015 ns/iter (± 1604) 0.98
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 55 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 102 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 104 ns/iter (± 0) 104 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3417 ns/iter (± 71) 3437 ns/iter (± 92) 0.99
es/base/parallel/resolver/typescript 5296607499 ns/iter (± 464011954) 5150120026 ns/iter (± 473726908) 1.03
es/base/parallel/hygiene/typescript 2380448850 ns/iter (± 27800768) 2402141318 ns/iter (± 51083476) 0.99
misc/visitors/time-complexity/time 5 92 ns/iter (± 0) 92 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 323 ns/iter (± 11) 312 ns/iter (± 0) 1.04
misc/visitors/time-complexity/time 15 607 ns/iter (± 7) 600 ns/iter (± 3) 1.01
misc/visitors/time-complexity/time 20 1141 ns/iter (± 17) 1122 ns/iter (± 0) 1.02
misc/visitors/time-complexity/time 40 6026 ns/iter (± 95) 6038 ns/iter (± 72) 1.00
misc/visitors/time-complexity/time 60 15215 ns/iter (± 35) 15192 ns/iter (± 57) 1.00
es/full-target/es2016 188066 ns/iter (± 849) 188058 ns/iter (± 459) 1.00
es/full-target/es2017 181862 ns/iter (± 531) 182711 ns/iter (± 581) 1.00
es/full-target/es2018 171567 ns/iter (± 440) 172673 ns/iter (± 441) 0.99
es2020_nullish_coalescing 66655 ns/iter (± 100) 67248 ns/iter (± 101) 0.99
es2020_optional_chaining 95573 ns/iter (± 290) 104533 ns/iter (± 9584) 0.91
es2022_class_properties 93361 ns/iter (± 127) 93493 ns/iter (± 202) 1.00
es2018_object_rest_spread 71475 ns/iter (± 81) 71970 ns/iter (± 103) 0.99
es2019_optional_catch_binding 61145 ns/iter (± 87) 61553 ns/iter (± 76) 0.99
es2017_async_to_generator 61414 ns/iter (± 127) 62064 ns/iter (± 130) 0.99
es2016_exponentiation 64786 ns/iter (± 129) 65845 ns/iter (± 203) 0.98
es2015_arrow 69895 ns/iter (± 245) 70574 ns/iter (± 257) 0.99
es2015_block_scoped_fn 66268 ns/iter (± 130) 66711 ns/iter (± 162) 0.99
es2015_block_scoping 158556 ns/iter (± 8878) 159559 ns/iter (± 11132) 0.99
es2015_classes 116643 ns/iter (± 476) 117163 ns/iter (± 348) 1.00
es2015_computed_props 61249 ns/iter (± 57) 61695 ns/iter (± 176) 0.99
es2015_destructuring 115011 ns/iter (± 315) 115959 ns/iter (± 285) 0.99
es2015_duplicate_keys 63307 ns/iter (± 60) 63950 ns/iter (± 136) 0.99
es2015_parameters 79155 ns/iter (± 113) 80024 ns/iter (± 222) 0.99
es2015_fn_name 66177 ns/iter (± 464) 67018 ns/iter (± 427) 0.99
es2015_for_of 64193 ns/iter (± 75) 64755 ns/iter (± 80) 0.99
es2015_instanceof 62793 ns/iter (± 61) 63389 ns/iter (± 101) 0.99
es2015_shorthand_property 60694 ns/iter (± 36) 61440 ns/iter (± 137) 0.99
es2015_spread 60946 ns/iter (± 101) 61534 ns/iter (± 92) 0.99
es2015_sticky_regex 62057 ns/iter (± 90) 62943 ns/iter (± 106) 0.99
es2015_typeof_symbol 61951 ns/iter (± 95) 62998 ns/iter (± 104) 0.98
es/transform/baseline/base 51616 ns/iter (± 160) 52354 ns/iter (± 93) 0.99
es/transform/baseline/common_reserved_word 62335 ns/iter (± 58) 63404 ns/iter (± 150) 0.98
es/transform/baseline/common_typescript 145088 ns/iter (± 3039) 168974 ns/iter (± 218) 0.86
es/target/es3 168882 ns/iter (± 196) 169908 ns/iter (± 323) 0.99
es/target/es2015 625284 ns/iter (± 1088) 631232 ns/iter (± 1493) 0.99
es/target/es2016 64927 ns/iter (± 103) 65965 ns/iter (± 100) 0.98
es/target/es2017 61569 ns/iter (± 80) 62163 ns/iter (± 101) 0.99
es/target/es2018 81887 ns/iter (± 134) 82517 ns/iter (± 121) 0.99
es/target/es2020 131908 ns/iter (± 323) 132705 ns/iter (± 181) 0.99
babelify-only 671208 ns/iter (± 1499) 677891 ns/iter (± 4704) 0.99
parse_and_babelify_angular 45445699 ns/iter (± 1046262) 45783442 ns/iter (± 1043874) 0.99
parse_and_babelify_backbone 5398427 ns/iter (± 34997) 5438737 ns/iter (± 93810) 0.99
parse_and_babelify_jquery 32214522 ns/iter (± 259826) 33353744 ns/iter (± 919262) 0.97
parse_and_babelify_jquery_mobile 55285190 ns/iter (± 1110985) 56289671 ns/iter (± 703720) 0.98
parse_and_babelify_mootools 32928334 ns/iter (± 786262) 35505019 ns/iter (± 696914) 0.93
parse_and_babelify_underscore 4381821 ns/iter (± 21276) 4433673 ns/iter (± 79227) 0.99
parse_and_babelify_yui 33281503 ns/iter (± 763993) 33678938 ns/iter (± 524357) 0.99
html/minify/document/css_spec 41470575 ns/iter (± 119667) 42191367 ns/iter (± 665097) 0.98
html/minify/document/github 17448280 ns/iter (± 24379) 17606807 ns/iter (± 47419) 0.99
html/minify/document/stackoverflow 15687755 ns/iter (± 25222) 15756590 ns/iter (± 92278) 1.00
html/minify/document_fragment/css_spec 39516606 ns/iter (± 237124) 40550779 ns/iter (± 252070) 0.97
html/minify/document_fragment/github 16845271 ns/iter (± 22264) 16897434 ns/iter (± 32071) 1.00
html/minify/document_fragment/stackoverflow 15313887 ns/iter (± 24618) 15523951 ns/iter (± 127887) 0.99
html/document/visitor/compare/clone 338027 ns/iter (± 1932) 337399 ns/iter (± 1954) 1.00
html/document/visitor/compare/visit_mut_span 366537 ns/iter (± 1267) 366446 ns/iter (± 1948) 1.00
html/document/visitor/compare/visit_mut_span_panic 373973 ns/iter (± 1332) 372046 ns/iter (± 1913) 1.01
html/document/visitor/compare/fold_span 401277 ns/iter (± 1487) 401462 ns/iter (± 1549) 1.00
html/document/visitor/compare/fold_span_panic 462570 ns/iter (± 2308) 460486 ns/iter (± 1698) 1.00
html/document_fragment/visitor/compare/clone 342141 ns/iter (± 1737) 338027 ns/iter (± 2419) 1.01
html/document_fragment/visitor/compare/visit_mut_span 369402 ns/iter (± 2208) 365831 ns/iter (± 2084) 1.01
html/document_fragment/visitor/compare/visit_mut_span_panic 380078 ns/iter (± 2541) 376275 ns/iter (± 1837) 1.01
html/document_fragment/visitor/compare/fold_span 407366 ns/iter (± 2385) 406182 ns/iter (± 1303) 1.00
html/document_fragment/visitor/compare/fold_span_panic 455644 ns/iter (± 2271) 461453 ns/iter (± 2194) 0.99
html/lexer/css_2021_spec 15662011 ns/iter (± 12170) 15558049 ns/iter (± 12346) 1.01
html/lexer/github_com_17_05_2022 6033115 ns/iter (± 3036) 6027918 ns/iter (± 1963) 1.00
html/lexer/stackoverflow_com_17_05_2022 5655201 ns/iter (± 1778) 5638412 ns/iter (± 2341) 1.00
html/parser/parser_document/css_2021_spec 25187780 ns/iter (± 88386) 26166601 ns/iter (± 394197) 0.96
html/parser/parser_document/github_com_17_05_2022 8713111 ns/iter (± 4857) 8754306 ns/iter (± 6683) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7712166 ns/iter (± 8186) 7704959 ns/iter (± 16564) 1.00
html/parser/parser_document_fragment/css_2021_spec 25353904 ns/iter (± 113697) 25950702 ns/iter (± 333872) 0.98
html/parser/parser_document_fragment/github_com_17_05_2022 8728311 ns/iter (± 19730) 8741806 ns/iter (± 10340) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7721929 ns/iter (± 10976) 7697667 ns/iter (± 4958) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.