Skip to content

Commit

Permalink
refactor(es/minifier): Merge cond_init with reassigned (#6850)
Browse files Browse the repository at this point in the history
**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.
  • Loading branch information
Austaras committed Jan 26, 2023
1 parent 1bf9b37 commit 55225cb
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 60 deletions.
9 changes: 3 additions & 6 deletions crates/swc_ecma_minifier/src/compress/optimize/inline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ where
return;
}

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

Expr::Ident(id) if !id.eq_ignore_span(ident) => {
if let Some(init_usage) = self.data.vars.get(&id.to_id()) {
if init_usage.reassigned()
|| !init_usage.declared
|| init_usage.cond_init
{
if init_usage.reassigned() || !init_usage.declared {
return;
}
}
Expand Down
44 changes: 19 additions & 25 deletions crates/swc_ecma_minifier/src/program_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,6 @@ pub(crate) struct VarUsageInfo {
/// The number of direct reference to this identifier.
pub(crate) ref_count: u32,

/// `true` if a variable is conditionally initialized.
pub(crate) cond_init: bool,

/// `false` if it's only used.
pub(crate) declared: bool,
pub(crate) declared_count: u32,
Expand All @@ -86,9 +83,8 @@ pub(crate) struct VarUsageInfo {
/// - Update is counted as usage, but assign is not
pub(crate) usage_count: u32,

/// The variable itself is modified.
reassigned_with_assignment: bool,
reassigned_with_var_decl: bool,
/// The variable itself is assigned after reference.
reassigned: bool,
/// The variable itself or a property of it is modified.
pub(crate) mutated: bool,

Expand Down Expand Up @@ -140,7 +136,6 @@ impl Default for VarUsageInfo {
Self {
inline_prevented: Default::default(),
ref_count: Default::default(),
cond_init: Default::default(),
declared: Default::default(),
declared_count: Default::default(),
declared_as_fn_param: Default::default(),
Expand All @@ -149,8 +144,7 @@ impl Default for VarUsageInfo {
assign_count: Default::default(),
mutation_by_call_count: Default::default(),
usage_count: Default::default(),
reassigned_with_assignment: Default::default(),
reassigned_with_var_decl: Default::default(),
reassigned: Default::default(),
mutated: Default::default(),
has_property_access: Default::default(),
has_property_mutation: Default::default(),
Expand Down Expand Up @@ -186,8 +180,7 @@ impl VarUsageInfo {
}

pub(crate) fn reassigned(&self) -> bool {
self.reassigned_with_assignment
|| self.reassigned_with_var_decl
self.reassigned
|| (u32::from(self.var_initialized)
+ u32::from(self.declared_as_catch_param)
+ u32::from(self.declared_as_fn_param)
Expand Down Expand Up @@ -241,25 +234,27 @@ impl Storage for ProgramData {
Entry::Occupied(mut e) => {
e.get_mut().inline_prevented |= var_info.inline_prevented;

e.get_mut().cond_init |= if !inited && e.get().var_initialized {
true
} else {
var_info.cond_init
};
if var_info.var_initialized {
if e.get().var_initialized || e.get().ref_count > 0 {
e.get_mut().assign_count += 1;
e.get_mut().reassigned_with_assignment = true;
e.get_mut().reassigned = true;
} else {
// If it is referred outside child scope, it will
// be marked as var_initialized false
e.get_mut().var_initialized = true;
}
} else {
// If it is inited in some other child scope, but referenced in
// current child scope
if !inited && e.get().var_initialized && var_info.ref_count > 0 {
e.get_mut().reassigned = true
}
}

e.get_mut().ref_count += var_info.ref_count;

e.get_mut().reassigned_with_assignment |= var_info.reassigned_with_assignment;
e.get_mut().reassigned_with_var_decl |= var_info.reassigned_with_var_decl;
e.get_mut().reassigned |= var_info.reassigned;

e.get_mut().mutated |= var_info.mutated;

e.get_mut().has_property_access |= var_info.has_property_access;
Expand Down Expand Up @@ -359,7 +354,7 @@ impl Storage for ProgramData {
}

v.mutated = true;
v.reassigned_with_var_decl = true;
v.reassigned = true;
v.assign_count += 1;
}

Expand Down Expand Up @@ -458,8 +453,8 @@ impl VarDataLike for VarUsageInfo {
self.mutated = true;
}

fn mark_reassigned_with_assign(&mut self) {
self.reassigned_with_assignment = true;
fn mark_reassigned(&mut self) {
self.reassigned = true;
}

fn add_infects_to(&mut self, other: Access) {
Expand Down Expand Up @@ -625,11 +620,10 @@ impl ProgramData {
if is_first {
e.ref_count += 1;
if !inited && e.var_initialized {
e.cond_init = true;
if !is_modify {
e.var_initialized = false;
e.assign_count += 1;
e.reassigned_with_assignment = true
e.reassigned = true
}
}
}
Expand All @@ -656,7 +650,7 @@ impl ProgramData {
e.assign_count -= 1;
e.var_initialized = true;
} else {
e.reassigned_with_assignment = true
e.reassigned = true
}
}

Expand Down
12 changes: 6 additions & 6 deletions crates/swc_ecma_minifier/tests/benches-full/echarts.js
Original file line number Diff line number Diff line change
Expand Up @@ -26853,8 +26853,8 @@
mousemove: function(e) {
var x = e.offsetX, y = e.offsetY, localCursorPoint = this.group.transformCoordToLocal(x, y);
if (!function(controller, e, localCursorPoint) {
if (!(!controller._brushType || (controller1 = controller, x = e.offsetX, y = e.offsetY, zr = controller1._zr, x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight()))) {
var controller1, x, y, zr, zr1 = controller._zr, covers = controller._covers, currPanel = getPanelByPoint(controller, e, localCursorPoint);
if (!(!controller._brushType || (x = e.offsetX, y = e.offsetY, zr = controller._zr, x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight()))) {
var x, y, zr, zr1 = controller._zr, covers = controller._covers, currPanel = getPanelByPoint(controller, e, localCursorPoint);
if (!controller._dragging) for(var i = 0; i < covers.length; i++){
var brushOption = covers[i].__brushOption;
if (currPanel && (!0 === currPanel || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) return;
Expand Down Expand Up @@ -36191,10 +36191,10 @@
'parallel' === seriesModel.subType ? (coordSys = seriesModel.coordinateSystem, hasBrushExists = hasBrushExists || coordSys.hasAxisBrushed(), linkOthers(seriesIndex) && coordSys.eachActiveState(seriesModel.getData(), function(activeState, dataIndex) {
'active' === activeState && (selectedDataIndexForLink[dataIndex] = 1);
})) : function(seriesModel, seriesIndex, rangeInfoList) {
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) {
if (!(!seriesModel.brushSelector || null != (seriesIndices = brushModel.option.seriesIndex) && 'all' !== seriesIndices && (isArray(seriesIndices) ? 0 > indexOf(seriesIndices, seriesIndex) : seriesIndex !== seriesIndices)) && (each(areas, function(area) {
brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel) && rangeInfoList.push(area), hasBrushExists = hasBrushExists || brushed(rangeInfoList);
}), linkOthers(seriesIndex) && brushed(rangeInfoList))) {
var brushModel1, seriesIndex1, seriesIndices, data_1 = seriesModel.getData();
var seriesIndices, data_1 = seriesModel.getData();
data_1.each(function(dataIndex) {
checkInRange(seriesModel, rangeInfoList, data_1, dataIndex) && (selectedDataIndexForLink[dataIndex] = 1);
});
Expand Down Expand Up @@ -40856,8 +40856,8 @@
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;
}
return function(exprOption, getters) {
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++){
var type, keyRaw = exprKeys[i];
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++){
var keyRaw = exprKeys[i];
if (!('parser' === keyRaw || getters.valueGetterAttrMap.get(keyRaw))) {
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);
evaluator || throwError(makePrintable('Illegal relational operation: "' + keyRaw + '" in condition:', exprOption)), subCondList.push(evaluator);
Expand Down
4 changes: 2 additions & 2 deletions crates/swc_ecma_minifier/tests/benches-full/lodash.js
Original file line number Diff line number Diff line change
Expand Up @@ -627,9 +627,9 @@
if (!isObject(value)) return value;
var isArr = isArray(value);
if (isArr) {
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);
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);
} else {
var array, length, result1, object1, object2, object3, tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
var length, result1, object1, object2, object3, tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
if (isBuffer(value)) return cloneBuffer(value, isDeep);
if (tag == objectTag || tag == argsTag || isFunc && !object) {
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));
Expand Down
12 changes: 6 additions & 6 deletions crates/swc_ecma_minifier/tests/benches-full/vue.js
Original file line number Diff line number Diff line change
Expand Up @@ -2626,14 +2626,14 @@
var id = "__transition-" + this._uid + "-";
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;
var data = (child.data || (child.data = {})).transition = extractTransitionData(this), oldRawChild = this._vnode, oldChild = getRealChild(oldRawChild);
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)) {
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)) {
var oldData = oldChild.data.transition = extend({}, data);
if ('out-in' === mode) return this._leaving = !0, mergeVNodeHook(oldData, 'afterLeave', function() {
this$1._leaving = !1, this$1.$forceUpdate();
}), placeholder(h, rawChild);
if ('in-out' === mode) {
if (isAsyncPlaceholder(child)) return oldRawChild;
var child1, oldChild1, delayedLeave, performLeave = function() {
var delayedLeave, performLeave = function() {
delayedLeave();
};
mergeVNodeHook(data, 'afterEnter', performLeave), mergeVNodeHook(data, 'enterCancelled', performLeave), mergeVNodeHook(oldData, 'delayLeave', function(leave) {
Expand Down Expand Up @@ -3092,17 +3092,17 @@
if (el.for && !el.forProcessed) return genFor(el, state);
if (el.if && !el.ifProcessed) return genIf(el, state);
if ('template' === el.tag && !el.slotTarget && !state.pre) return genChildren(el, state) || 'void 0';
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) {
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) {
return {
name: camelize(attr.name),
value: attr.value,
dynamic: attr.dynamic
};
})) : null, bind$$1 = el1.attrsMap['v-bind'], (attrs || bind$$1) && !children && (res += ",null"), attrs && (res += "," + attrs), bind$$1 && (res += (attrs ? '' : ',null') + "," + bind$$1), res + ')';
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 : '') + ")";
})) : null, bind$$1 = el.attrsMap['v-bind'], (attrs || bind$$1) && !children && (res += ",null"), attrs && (res += "," + attrs), bind$$1 && (res += (attrs ? '' : ',null') + "," + bind$$1), res + ')';
if (el.component) componentName = el.component, children1 = el.inlineTemplate ? null : genChildren(el, state, !0), code = "_c(" + componentName + "," + genData$2(el, state) + (children1 ? "," + children1 : '') + ")";
else {
(!el.plain || el.pre && state.maybeComponent(el)) && (data = genData$2(el, state));
var el1, state1, children, res, attrs, bind$$1, code, componentName, el2, state2, children1, data, children2 = el.inlineTemplate ? null : genChildren(el, state, !0);
var children, res, attrs, bind$$1, code, componentName, children1, data, children2 = el.inlineTemplate ? null : genChildren(el, state, !0);
code = "_c('" + el.tag + "'" + (data ? "," + data : '') + (children2 ? "," + children2 : '') + ")";
}
for(var i = 0; i < state.transforms.length; i++)code = state.transforms[i](el, code);
Expand Down
Loading

1 comment on commit 55225cb

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.