Skip to content

Commit

Permalink
feat(es/minifier): Optimize calls to Boolean/Number/String/`Sym…
Browse files Browse the repository at this point in the history
…bol` (#7006)
  • Loading branch information
Austaras committed Mar 4, 2023
1 parent 6b48896 commit 06cbb90
Show file tree
Hide file tree
Showing 18 changed files with 154 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ var f = function(e) {
}, m = function(e, t) {
return e.props.indexContextValue.targetedIndex === t;
}, p = function(e) {
return Boolean(e.props.indexId);
return !!e.props.indexId;
}, g = function(e, t) {
return e.props.indexId === t;
}, h = function(e, t) {
Expand All @@ -30,26 +30,26 @@ var f = function(e) {
export default function S(u) {
var o, l, S = u.indexName, v = u.initialState, x = u.searchClient, y = u.resultsState, w = u.stalledSearchDelay, F = function(e) {
return O.getWidgets().filter(function(e) {
return Boolean(e.getMetadata);
return !!e.getMetadata;
}).map(function(t) {
return t.getMetadata(e);
});
}, _ = function() {
var a = O.getWidgets().filter(function(e) {
return Boolean(e.getSearchParameters);
return !!e.getSearchParameters;
}).filter(function(e) {
return !f(e) && !p(e);
}).reduce(function(e, t) {
return t.getSearchParameters(e);
}, N), n = O.getWidgets().filter(function(e) {
return Boolean(e.getSearchParameters);
return !!e.getSearchParameters;
}).filter(function(e) {
var t = f(e) && m(e, S), r = p(e) && g(e, S);
return t || r;
}).sort(h).reduce(function(e, t) {
return t.getSearchParameters(e);
}, a), s = O.getWidgets().filter(function(e) {
return Boolean(e.getSearchParameters);
return !!e.getSearchParameters;
}).filter(function(e) {
var t = f(e) && !m(e, S), r = p(e) && !g(e, S);
return t || r;
Expand Down Expand Up @@ -324,7 +324,7 @@ export default function S(u) {
transitionState: function(e) {
var t = q.getState().widgets;
return O.getWidgets().filter(function(e) {
return Boolean(e.transitionState);
return !!e.transitionState;
}).reduce(function(e, r) {
return r.transitionState(t, e);
}, e);
Expand Down
101 changes: 101 additions & 0 deletions crates/swc_ecma_minifier/src/compress/pure/misc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,107 @@ impl Pure<'_> {
return;
}
}
Expr::Call(CallExpr {
span,
callee: Callee::Expr(callee),
args,
..
}) if callee.is_one_of_global_ref_to(
&self.expr_ctx,
&["Boolean", "Number", "String", "Symbol"],
) =>
{
let new_expr = match &**callee {
Expr::Ident(Ident {
sym: js_word!("Boolean"),
..
}) => match &mut args[..] {
[] => Some(Expr::Lit(Lit::Bool(Bool {
span: *span,
value: false,
}))),
[ExprOrSpread { spread: None, expr }] => Some(Expr::Unary(UnaryExpr {
span: *span,
op: op!("!"),
arg: Expr::Unary(UnaryExpr {
span: *span,
op: op!("!"),
arg: expr.take(),
})
.into(),
})),
_ => None,
},
Expr::Ident(Ident {
sym: js_word!("Number"),
..
}) => match &mut args[..] {
[] => Some(Expr::Lit(Lit::Num(Number {
span: *span,
value: 0.0,
raw: None,
}))),
// this is indeed very unsafe in case of BigInt
[ExprOrSpread { spread: None, expr }] if self.options.unsafe_math => {
Some(Expr::Unary(UnaryExpr {
span: *span,
op: op!(unary, "+"),
arg: expr.take(),
}))
}
_ => None,
},
Expr::Ident(Ident {
sym: js_word!("String"),
..
}) => match &mut args[..] {
[] => Some(Expr::Lit(Lit::Str(Str {
span: *span,
value: "".into(),
raw: None,
}))),
// this is also very unsafe in case of Symbol
[ExprOrSpread { spread: None, expr }] if self.options.unsafe_passes => {
Some(Expr::Bin(BinExpr {
span: *span,
left: expr.take(),
op: op!(bin, "+"),
right: Expr::Lit(Lit::Str(Str {
span: *span,
value: "".into(),
raw: None,
}))
.into(),
}))
}
_ => None,
},
Expr::Ident(Ident {
sym: js_word!("Symbol"),
..
}) => {
if let [ExprOrSpread { spread: None, .. }] = &mut args[..] {
if self.options.unsafe_symbols {
args.clear();
report_change!("Remove Symbol call parameter");
self.changed = true;
}
}
None
}
_ => unreachable!(),
};

if let Some(new_expr) = new_expr {
report_change!(
"Converting Boolean/Number/String/Symbol call to native constructor to \
literal"
);
self.changed = true;
*e = new_expr;
return;
}
}
_ => {}
};

Expand Down
3 changes: 0 additions & 3 deletions crates/swc_ecma_minifier/tests/TODO.txt
Original file line number Diff line number Diff line change
Expand Up @@ -250,9 +250,6 @@ issue_203/compress_new_function/input.js
issue_203/compress_new_function_with_destruct/input.js
issue_203/compress_new_function_with_destruct_arrows/input.js
issue_22/return_with_no_value_in_if_body/input.js
issue_269/issue_269_1/input.js
issue_269/regexp/input.js
issue_269/strings_concat/input.js
issue_281/collapse_vars_constants/input.js
issue_281/issue_1758/input.js
issue_2871/comparison_with_undefined/input.js
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/tests/benches-full/terser.js
Original file line number Diff line number Diff line change
Expand Up @@ -1919,7 +1919,7 @@
this.prototype[name] = method;
}, ctor;
}
const has_tok_flag = (tok, flag)=>Boolean(tok.flags & flag), set_tok_flag = (tok, flag, truth)=>{
const has_tok_flag = (tok, flag)=>!!(tok.flags & flag), set_tok_flag = (tok, flag, truth)=>{
truth ? tok.flags |= flag : tok.flags &= ~flag;
};
class AST_Token {
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/tests/benches-full/victory.js
Original file line number Diff line number Diff line change
Expand Up @@ -26588,7 +26588,7 @@
{
key: "shouldAnimate",
value: function() {
return Boolean(this.props.animate);
return !!this.props.animate;
}
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10310,7 +10310,7 @@
}
return !1 === options.sort ? ret : (!0 === options.sort ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key)=>{
const value = ret[key];
return Boolean(value) && "object" == typeof value && !Array.isArray(value) ? result[key] = function keysSorter(input) {
return value && "object" == typeof value && !Array.isArray(value) ? result[key] = function keysSorter(input) {
return Array.isArray(input) ? input.sort() : "object" == typeof input ? keysSorter(Object.keys(input)).sort((a, b)=>Number(a) - Number(b)).map((key)=>input[key]) : input;
}(value) : result[key] = value, result;
}, Object.create(null));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function addAlgoliaAgents(searchClient) {
const isMultiIndexContext = (widget)=>hasMultipleIndices({
ais: widget.props.contextValue,
multiIndexContext: widget.props.indexContextValue
}), isTargetedIndexEqualIndex = (widget, indexId)=>widget.props.indexContextValue.targetedIndex === indexId, isIndexWidget = (widget)=>Boolean(widget.props.indexId), isIndexWidgetEqualIndex = (widget, indexId)=>widget.props.indexId === indexId, sortIndexWidgetsFirst = (firstWidget, secondWidget)=>{
}), isTargetedIndexEqualIndex = (widget, indexId)=>widget.props.indexContextValue.targetedIndex === indexId, isIndexWidget = (widget)=>!!widget.props.indexId, isIndexWidgetEqualIndex = (widget, indexId)=>widget.props.indexId === indexId, sortIndexWidgetsFirst = (firstWidget, secondWidget)=>{
const isFirstWidgetIndex = isIndexWidget(firstWidget), isSecondWidgetIndex = isIndexWidget(secondWidget);
return isFirstWidgetIndex && !isSecondWidgetIndex ? -1 : !isFirstWidgetIndex && isSecondWidgetIndex ? 1 : 0;
};
Expand Down Expand Up @@ -149,13 +149,13 @@ export default function createInstantSearchManager({ indexName , initialState ={
searchingForFacetValues: !1
});
function getMetadata(state) {
return widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getMetadata)).map((widget)=>widget.getMetadata(state));
return widgetsManager.getWidgets().filter((widget)=>!!widget.getMetadata).map((widget)=>widget.getMetadata(state));
}
function getSearchParameters() {
const sharedParameters = widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getSearchParameters)).filter((widget)=>!isMultiIndexContext(widget) && !isIndexWidget(widget)).reduce((res, widget)=>widget.getSearchParameters(res), initialSearchParameters), mainParameters = widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getSearchParameters)).filter((widget)=>{
const sharedParameters = widgetsManager.getWidgets().filter((widget)=>!!widget.getSearchParameters).filter((widget)=>!isMultiIndexContext(widget) && !isIndexWidget(widget)).reduce((res, widget)=>widget.getSearchParameters(res), initialSearchParameters), mainParameters = widgetsManager.getWidgets().filter((widget)=>!!widget.getSearchParameters).filter((widget)=>{
const targetedIndexEqualMainIndex = isMultiIndexContext(widget) && isTargetedIndexEqualIndex(widget, indexName), subIndexEqualMainIndex = isIndexWidget(widget) && isIndexWidgetEqualIndex(widget, indexName);
return targetedIndexEqualMainIndex || subIndexEqualMainIndex;
}).sort(sortIndexWidgetsFirst).reduce((res, widget)=>widget.getSearchParameters(res), sharedParameters), derivedIndices = widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getSearchParameters)).filter((widget)=>{
}).sort(sortIndexWidgetsFirst).reduce((res, widget)=>widget.getSearchParameters(res), sharedParameters), derivedIndices = widgetsManager.getWidgets().filter((widget)=>!!widget.getSearchParameters).filter((widget)=>{
const targetedIndexNotEqualMainIndex = isMultiIndexContext(widget) && !isTargetedIndexEqualIndex(widget, indexName), subIndexNotEqualMainIndex = isIndexWidget(widget) && !isIndexWidgetEqualIndex(widget, indexName);
return targetedIndexNotEqualMainIndex || subIndexNotEqualMainIndex;
}).sort(sortIndexWidgetsFirst).reduce((indices, widget)=>{
Expand Down Expand Up @@ -264,7 +264,7 @@ export default function createInstantSearchManager({ indexName , initialState ={
},
transitionState: function(nextSearchState) {
const searchState = store.getState().widgets;
return widgetsManager.getWidgets().filter((widget)=>Boolean(widget.transitionState)).reduce((res, widget)=>widget.transitionState(searchState, res), nextSearchState);
return widgetsManager.getWidgets().filter((widget)=>!!widget.transitionState).reduce((res, widget)=>widget.transitionState(searchState, res), nextSearchState);
},
updateClient: function(client) {
addAlgoliaAgents(client), helper.setClient(client), search();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function addAlgoliaAgents(searchClient) {
const isMultiIndexContext = (widget)=>hasMultipleIndices({
ais: widget.props.contextValue,
multiIndexContext: widget.props.indexContextValue
}), isTargetedIndexEqualIndex = (widget, indexId)=>widget.props.indexContextValue.targetedIndex === indexId, isIndexWidget = (widget)=>Boolean(widget.props.indexId), isIndexWidgetEqualIndex = (widget, indexId)=>widget.props.indexId === indexId, sortIndexWidgetsFirst = (firstWidget, secondWidget)=>{
}), isTargetedIndexEqualIndex = (widget, indexId)=>widget.props.indexContextValue.targetedIndex === indexId, isIndexWidget = (widget)=>!!widget.props.indexId, isIndexWidgetEqualIndex = (widget, indexId)=>widget.props.indexId === indexId, sortIndexWidgetsFirst = (firstWidget, secondWidget)=>{
const isFirstWidgetIndex = isIndexWidget(firstWidget), isSecondWidgetIndex = isIndexWidget(secondWidget);
return isFirstWidgetIndex && !isSecondWidgetIndex ? -1 : !isFirstWidgetIndex && isSecondWidgetIndex ? 1 : 0;
};
Expand Down Expand Up @@ -164,13 +164,13 @@ export default function createInstantSearchManager({ indexName , initialState ={
searchingForFacetValues: !1
});
function getMetadata(state) {
return widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getMetadata)).map((widget)=>widget.getMetadata(state));
return widgetsManager.getWidgets().filter((widget)=>!!widget.getMetadata).map((widget)=>widget.getMetadata(state));
}
function getSearchParameters() {
const sharedParameters = widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getSearchParameters)).filter((widget)=>!isMultiIndexContext(widget) && !isIndexWidget(widget)).reduce((res, widget)=>widget.getSearchParameters(res), initialSearchParameters), mainParameters = widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getSearchParameters)).filter((widget)=>{
const sharedParameters = widgetsManager.getWidgets().filter((widget)=>!!widget.getSearchParameters).filter((widget)=>!isMultiIndexContext(widget) && !isIndexWidget(widget)).reduce((res, widget)=>widget.getSearchParameters(res), initialSearchParameters), mainParameters = widgetsManager.getWidgets().filter((widget)=>!!widget.getSearchParameters).filter((widget)=>{
const targetedIndexEqualMainIndex = isMultiIndexContext(widget) && isTargetedIndexEqualIndex(widget, indexName), subIndexEqualMainIndex = isIndexWidget(widget) && isIndexWidgetEqualIndex(widget, indexName);
return targetedIndexEqualMainIndex || subIndexEqualMainIndex;
}).sort(sortIndexWidgetsFirst).reduce((res, widget)=>widget.getSearchParameters(res), sharedParameters), derivedIndices = widgetsManager.getWidgets().filter((widget)=>Boolean(widget.getSearchParameters)).filter((widget)=>{
}).sort(sortIndexWidgetsFirst).reduce((res, widget)=>widget.getSearchParameters(res), sharedParameters), derivedIndices = widgetsManager.getWidgets().filter((widget)=>!!widget.getSearchParameters).filter((widget)=>{
const targetedIndexNotEqualMainIndex = isMultiIndexContext(widget) && !isTargetedIndexEqualIndex(widget, indexName), subIndexNotEqualMainIndex = isIndexWidget(widget) && !isIndexWidgetEqualIndex(widget, indexName);
return targetedIndexNotEqualMainIndex || subIndexNotEqualMainIndex;
}).sort(sortIndexWidgetsFirst).reduce((indices, widget)=>{
Expand Down Expand Up @@ -279,7 +279,7 @@ export default function createInstantSearchManager({ indexName , initialState ={
},
transitionState: function(nextSearchState) {
const searchState = store.getState().widgets;
return widgetsManager.getWidgets().filter((widget)=>Boolean(widget.transitionState)).reduce((res, widget)=>widget.transitionState(searchState, res), nextSearchState);
return widgetsManager.getWidgets().filter((widget)=>!!widget.transitionState).reduce((res, widget)=>widget.transitionState(searchState, res), nextSearchState);
},
updateClient: function(client) {
addAlgoliaAgents(client), helper.setClient(client), search();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ var _obj, isMultiIndexContext = function(widget) {
}, isTargetedIndexEqualIndex = function(widget, indexId) {
return widget.props.indexContextValue.targetedIndex === indexId;
}, isIndexWidget = function(widget) {
return Boolean(widget.props.indexId);
return !!widget.props.indexId;
}, isIndexWidgetEqualIndex = function(widget, indexId) {
return widget.props.indexId === indexId;
}, sortIndexWidgetsFirst = function(firstWidget, secondWidget) {
Expand All @@ -26,26 +26,26 @@ var _obj, isMultiIndexContext = function(widget) {
export default function createInstantSearchManager(param) {
var state, listeners, indexName = param.indexName, _initialState = param.initialState, searchClient = param.searchClient, resultsState = param.resultsState, stalledSearchDelay = param.stalledSearchDelay, getMetadata = function(state) {
return widgetsManager.getWidgets().filter(function(widget) {
return Boolean(widget.getMetadata);
return !!widget.getMetadata;
}).map(function(widget) {
return widget.getMetadata(state);
});
}, getSearchParameters = function() {
var sharedParameters = widgetsManager.getWidgets().filter(function(widget) {
return Boolean(widget.getSearchParameters);
return !!widget.getSearchParameters;
}).filter(function(widget) {
return !isMultiIndexContext(widget) && !isIndexWidget(widget);
}).reduce(function(res, widget) {
return widget.getSearchParameters(res);
}, initialSearchParameters), mainParameters = widgetsManager.getWidgets().filter(function(widget) {
return Boolean(widget.getSearchParameters);
return !!widget.getSearchParameters;
}).filter(function(widget) {
var targetedIndexEqualMainIndex = isMultiIndexContext(widget) && isTargetedIndexEqualIndex(widget, indexName), subIndexEqualMainIndex = isIndexWidget(widget) && isIndexWidgetEqualIndex(widget, indexName);
return targetedIndexEqualMainIndex || subIndexEqualMainIndex;
}).sort(sortIndexWidgetsFirst).reduce(function(res, widget) {
return widget.getSearchParameters(res);
}, sharedParameters), derivedIndices = widgetsManager.getWidgets().filter(function(widget) {
return Boolean(widget.getSearchParameters);
return !!widget.getSearchParameters;
}).filter(function(widget) {
var targetedIndexNotEqualMainIndex = isMultiIndexContext(widget) && !isTargetedIndexEqualIndex(widget, indexName), subIndexNotEqualMainIndex = isIndexWidget(widget) && !isIndexWidgetEqualIndex(widget, indexName);
return targetedIndexNotEqualMainIndex || subIndexNotEqualMainIndex;
Expand Down Expand Up @@ -319,7 +319,7 @@ export default function createInstantSearchManager(param) {
transitionState: function(nextSearchState) {
var searchState = store.getState().widgets;
return widgetsManager.getWidgets().filter(function(widget) {
return Boolean(widget.transitionState);
return !!widget.transitionState;
}).reduce(function(res, widget) {
return widget.transitionState(searchState, res);
}, nextSearchState);
Expand Down
Loading

1 comment on commit 06cbb90

@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: 06cbb90 Previous: cfeb088 Ratio
es/full/bugs-1 323247 ns/iter (± 13490) 297004 ns/iter (± 14633) 1.09
es/full/minify/libraries/antd 1870745596 ns/iter (± 24531993) 1621449718 ns/iter (± 16790525) 1.15
es/full/minify/libraries/d3 347399605 ns/iter (± 4545707) 298072672 ns/iter (± 7541234) 1.17
es/full/minify/libraries/echarts 1419258897 ns/iter (± 8022353) 1245625604 ns/iter (± 14067658) 1.14
es/full/minify/libraries/jquery 100113421 ns/iter (± 2697464) 92075913 ns/iter (± 936744) 1.09
es/full/minify/libraries/lodash 115005927 ns/iter (± 1223892) 107276159 ns/iter (± 1127801) 1.07
es/full/minify/libraries/moment 56851891 ns/iter (± 786501) 53014744 ns/iter (± 439330) 1.07
es/full/minify/libraries/react 20444960 ns/iter (± 140695) 19273217 ns/iter (± 76295) 1.06
es/full/minify/libraries/terser 275773216 ns/iter (± 4132626) 249526811 ns/iter (± 1442869) 1.11
es/full/minify/libraries/three 511796938 ns/iter (± 9667460) 452685622 ns/iter (± 5849261) 1.13
es/full/minify/libraries/typescript 3438046605 ns/iter (± 18729509) 3055418756 ns/iter (± 13861675) 1.13
es/full/minify/libraries/victory 808182583 ns/iter (± 12695936) 691857288 ns/iter (± 10111204) 1.17
es/full/minify/libraries/vue 144350716 ns/iter (± 1607964) 131560692 ns/iter (± 1046275) 1.10
es/full/codegen/es3 26218 ns/iter (± 87) 25975 ns/iter (± 37) 1.01
es/full/codegen/es5 26225 ns/iter (± 359) 25949 ns/iter (± 64) 1.01
es/full/codegen/es2015 26247 ns/iter (± 40) 25944 ns/iter (± 45) 1.01
es/full/codegen/es2016 26203 ns/iter (± 31) 25948 ns/iter (± 55) 1.01
es/full/codegen/es2017 26190 ns/iter (± 88) 25971 ns/iter (± 109) 1.01
es/full/codegen/es2018 26155 ns/iter (± 52) 25977 ns/iter (± 53) 1.01
es/full/codegen/es2019 26227 ns/iter (± 47) 25958 ns/iter (± 80) 1.01
es/full/codegen/es2020 26178 ns/iter (± 94) 26002 ns/iter (± 78) 1.01
es/full/all/es3 168611584 ns/iter (± 3801871) 172424592 ns/iter (± 3333277) 0.98
es/full/all/es5 163064822 ns/iter (± 1933427) 162826240 ns/iter (± 2590371) 1.00
es/full/all/es2015 126998456 ns/iter (± 2537856) 126308436 ns/iter (± 1824295) 1.01
es/full/all/es2016 123250897 ns/iter (± 1368951) 124775790 ns/iter (± 1013216) 0.99
es/full/all/es2017 124733680 ns/iter (± 2046347) 122778403 ns/iter (± 1093646) 1.02
es/full/all/es2018 121164637 ns/iter (± 1282608) 120385870 ns/iter (± 1287599) 1.01
es/full/all/es2019 119260890 ns/iter (± 1471134) 119719105 ns/iter (± 900315) 1.00
es/full/all/es2020 116607365 ns/iter (± 2118738) 115018528 ns/iter (± 679562) 1.01
es/full/parser 532219 ns/iter (± 8524) 539328 ns/iter (± 8278) 0.99
es/full/base/fixer 22186 ns/iter (± 161) 22006 ns/iter (± 34) 1.01
es/full/base/resolver_and_hygiene 81679 ns/iter (± 45) 81676 ns/iter (± 181) 1.00
serialization of ast node 124 ns/iter (± 0) 124 ns/iter (± 0) 1
serialization of serde 124 ns/iter (± 0) 124 ns/iter (± 0) 1
css/minify/libraries/bootstrap 29540822 ns/iter (± 374551) 27895299 ns/iter (± 91308) 1.06
css/visitor/compare/clone 2104276 ns/iter (± 14667) 2081020 ns/iter (± 17839) 1.01
css/visitor/compare/visit_mut_span 2297176 ns/iter (± 20932) 2255440 ns/iter (± 8504) 1.02
css/visitor/compare/visit_mut_span_panic 2333117 ns/iter (± 15702) 2309974 ns/iter (± 9204) 1.01
css/visitor/compare/fold_span 3037056 ns/iter (± 15601) 3026976 ns/iter (± 29630) 1.00
css/visitor/compare/fold_span_panic 3217333 ns/iter (± 30860) 3175010 ns/iter (± 22952) 1.01
css/lexer/bootstrap_5_1_3 5179218 ns/iter (± 30062) 5245682 ns/iter (± 11341) 0.99
css/lexer/foundation_6_7_4 4358375 ns/iter (± 1938) 4430206 ns/iter (± 8451) 0.98
css/lexer/tailwind_3_1_1 829718 ns/iter (± 494) 837877 ns/iter (± 925) 0.99
css/parser/bootstrap_5_1_3 22620515 ns/iter (± 53510) 21612906 ns/iter (± 83553) 1.05
css/parser/foundation_6_7_4 18039888 ns/iter (± 48639) 17297679 ns/iter (± 52726) 1.04
css/parser/tailwind_3_1_1 3322905 ns/iter (± 8097) 3315882 ns/iter (± 6396) 1.00
es/codegen/colors 331147 ns/iter (± 184782) 331478 ns/iter (± 186139) 1.00
es/codegen/large 1206909 ns/iter (± 608945) 1171948 ns/iter (± 607000) 1.03
es/codegen/with-parser/colors 47997 ns/iter (± 316) 47829 ns/iter (± 293) 1.00
es/codegen/with-parser/large 528216 ns/iter (± 1895) 524748 ns/iter (± 1911) 1.01
es/minify/libraries/antd 1637533874 ns/iter (± 9540850) 1421785752 ns/iter (± 19464286) 1.15
es/minify/libraries/d3 291543084 ns/iter (± 3158373) 255642738 ns/iter (± 2281242) 1.14
es/minify/libraries/echarts 1228390397 ns/iter (± 14327199) 1075379034 ns/iter (± 9150332) 1.14
es/minify/libraries/jquery 85450284 ns/iter (± 655124) 79556274 ns/iter (± 680571) 1.07
es/minify/libraries/lodash 103901126 ns/iter (± 1267061) 95537033 ns/iter (± 836220) 1.09
es/minify/libraries/moment 48491170 ns/iter (± 330069) 46033509 ns/iter (± 302438) 1.05
es/minify/libraries/react 18032469 ns/iter (± 197019) 17162754 ns/iter (± 102709) 1.05
es/minify/libraries/terser 249995441 ns/iter (± 4320741) 210822898 ns/iter (± 1364605) 1.19
es/minify/libraries/three 449505076 ns/iter (± 6946060) 371729920 ns/iter (± 4246917) 1.21
es/minify/libraries/typescript 2949361408 ns/iter (± 23615708) 2599893801 ns/iter (± 8562865) 1.13
es/minify/libraries/victory 689235634 ns/iter (± 6115665) 574021545 ns/iter (± 5442896) 1.20
es/minify/libraries/vue 128384238 ns/iter (± 2370415) 116198616 ns/iter (± 702600) 1.10
es/visitor/compare/clone 2426703 ns/iter (± 27515) 2366250 ns/iter (± 20242) 1.03
es/visitor/compare/visit_mut_span 2825840 ns/iter (± 16858) 2788776 ns/iter (± 18195) 1.01
es/visitor/compare/visit_mut_span_panic 2884596 ns/iter (± 28409) 2795639 ns/iter (± 5864) 1.03
es/visitor/compare/fold_span 4123226 ns/iter (± 30645) 3875519 ns/iter (± 11999) 1.06
es/visitor/compare/fold_span_panic 4190472 ns/iter (± 53786) 4040896 ns/iter (± 17299) 1.04
es/lexer/colors 16322 ns/iter (± 25) 16224 ns/iter (± 12) 1.01
es/lexer/angular 7851917 ns/iter (± 1793) 7834095 ns/iter (± 8824) 1.00
es/lexer/backbone 1011843 ns/iter (± 691) 1007361 ns/iter (± 780) 1.00
es/lexer/jquery 5615967 ns/iter (± 3759) 5591836 ns/iter (± 7993) 1.00
es/lexer/jquery mobile 8638358 ns/iter (± 8302) 8581925 ns/iter (± 21323) 1.01
es/lexer/mootools 4439090 ns/iter (± 2364) 4417473 ns/iter (± 6141) 1.00
es/lexer/underscore 845688 ns/iter (± 820) 839112 ns/iter (± 1715) 1.01
es/lexer/three 26420963 ns/iter (± 14971) 26159580 ns/iter (± 44547) 1.01
es/lexer/yui 4830922 ns/iter (± 2710) 4816577 ns/iter (± 11175) 1.00
es/parser/colors 30150 ns/iter (± 110) 30369 ns/iter (± 51) 0.99
es/parser/angular 16828087 ns/iter (± 289340) 15866140 ns/iter (± 104234) 1.06
es/parser/backbone 2318460 ns/iter (± 14230) 2317337 ns/iter (± 15168) 1.00
es/parser/jquery 12870234 ns/iter (± 189890) 12383346 ns/iter (± 63302) 1.04
es/parser/jquery mobile 20709542 ns/iter (± 207768) 19572317 ns/iter (± 202465) 1.06
es/parser/mootools 9735203 ns/iter (± 167318) 9506587 ns/iter (± 28690) 1.02
es/parser/underscore 1959498 ns/iter (± 11218) 1953488 ns/iter (± 13037) 1.00
es/parser/three 61532138 ns/iter (± 210003) 56683804 ns/iter (± 425623) 1.09
es/parser/yui 9913635 ns/iter (± 147929) 9553539 ns/iter (± 52496) 1.04
es/preset-env/usage/builtin_type 140334 ns/iter (± 31360) 141210 ns/iter (± 31942) 0.99
es/preset-env/usage/property 21245 ns/iter (± 84) 21126 ns/iter (± 107) 1.01
es/resolver/typescript 125740581 ns/iter (± 2327154) 111443282 ns/iter (± 2499154) 1.13
es/fixer/typescript 99625298 ns/iter (± 1066540) 85021177 ns/iter (± 3731243) 1.17
es/hygiene/typescript 219518248 ns/iter (± 1427454) 181057249 ns/iter (± 1484556) 1.21
es/resolver_with_hygiene/typescript 371512638 ns/iter (± 3535832) 317835488 ns/iter (± 3188127) 1.17
es/visitor/base-perf/module_clone 76361 ns/iter (± 2013) 76458 ns/iter (± 1881) 1.00
es/visitor/base-perf/fold_empty 85795 ns/iter (± 1063) 86198 ns/iter (± 1533) 1.00
es/visitor/base-perf/fold_noop_impl_all 85418 ns/iter (± 1609) 85915 ns/iter (± 1116) 0.99
es/visitor/base-perf/fold_noop_impl_vec 85890 ns/iter (± 1665) 88432 ns/iter (± 2283) 0.97
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 56 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) 104 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 103 ns/iter (± 0) 102 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3422 ns/iter (± 77) 3525 ns/iter (± 59) 0.97
es/base/parallel/resolver/typescript 5422421996 ns/iter (± 533306563) 5193336620 ns/iter (± 625489084) 1.04
es/base/parallel/hygiene/typescript 2452145289 ns/iter (± 15920037) 2143895316 ns/iter (± 25126299) 1.14
misc/visitors/time-complexity/time 5 100 ns/iter (± 2) 100 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 338 ns/iter (± 1) 326 ns/iter (± 0) 1.04
misc/visitors/time-complexity/time 15 665 ns/iter (± 8) 658 ns/iter (± 1) 1.01
misc/visitors/time-complexity/time 20 1215 ns/iter (± 0) 1215 ns/iter (± 0) 1
misc/visitors/time-complexity/time 40 6192 ns/iter (± 2) 6198 ns/iter (± 2) 1.00
misc/visitors/time-complexity/time 60 15562 ns/iter (± 1) 15571 ns/iter (± 13) 1.00
es/full-target/es2016 188560 ns/iter (± 487) 187613 ns/iter (± 521) 1.01
es/full-target/es2017 183208 ns/iter (± 526) 182535 ns/iter (± 719) 1.00
es/full-target/es2018 171859 ns/iter (± 381) 171480 ns/iter (± 472) 1.00
es2020_nullish_coalescing 67492 ns/iter (± 239) 66913 ns/iter (± 250) 1.01
es2020_optional_chaining 96285 ns/iter (± 5859) 96284 ns/iter (± 2638) 1.00
es2022_class_properties 94890 ns/iter (± 119) 94584 ns/iter (± 193) 1.00
es2018_object_rest_spread 72149 ns/iter (± 123) 71335 ns/iter (± 136) 1.01
es2019_optional_catch_binding 61805 ns/iter (± 167) 60890 ns/iter (± 121) 1.02
es2017_async_to_generator 62387 ns/iter (± 149) 61539 ns/iter (± 124) 1.01
es2016_exponentiation 66141 ns/iter (± 139) 64834 ns/iter (± 89) 1.02
es2015_arrow 71275 ns/iter (± 132) 70149 ns/iter (± 131) 1.02
es2015_block_scoped_fn 67521 ns/iter (± 195) 66181 ns/iter (± 94) 1.02
es2015_block_scoping 139624 ns/iter (± 9121) 158411 ns/iter (± 6569) 0.88
es2015_classes 117628 ns/iter (± 528) 116898 ns/iter (± 296) 1.01
es2015_computed_props 62018 ns/iter (± 146) 61114 ns/iter (± 129) 1.01
es2015_destructuring 118039 ns/iter (± 227) 117179 ns/iter (± 266) 1.01
es2015_duplicate_keys 64469 ns/iter (± 165) 63541 ns/iter (± 117) 1.01
es2015_parameters 80722 ns/iter (± 239) 80117 ns/iter (± 188) 1.01
es2015_fn_name 67946 ns/iter (± 645) 66486 ns/iter (± 413) 1.02
es2015_for_of 65254 ns/iter (± 132) 64431 ns/iter (± 125) 1.01
es2015_instanceof 64019 ns/iter (± 113) 63540 ns/iter (± 202) 1.01
es2015_shorthand_property 61564 ns/iter (± 106) 61115 ns/iter (± 123) 1.01
es2015_spread 61768 ns/iter (± 118) 60962 ns/iter (± 173) 1.01
es2015_sticky_regex 62908 ns/iter (± 160) 62355 ns/iter (± 140) 1.01
es2015_typeof_symbol 63353 ns/iter (± 109) 62626 ns/iter (± 144) 1.01
es/transform/baseline/base 52433 ns/iter (± 123) 51923 ns/iter (± 153) 1.01
es/transform/baseline/common_reserved_word 63212 ns/iter (± 96) 62797 ns/iter (± 139) 1.01
es/transform/baseline/common_typescript 168047 ns/iter (± 1714) 168185 ns/iter (± 1213) 1.00
es/target/es3 171820 ns/iter (± 212) 170805 ns/iter (± 367) 1.01
es/target/es2015 634474 ns/iter (± 1967) 628290 ns/iter (± 1724) 1.01
es/target/es2016 65999 ns/iter (± 86) 64924 ns/iter (± 115) 1.02
es/target/es2017 62444 ns/iter (± 103) 61853 ns/iter (± 73) 1.01
es/target/es2018 82038 ns/iter (± 85) 81381 ns/iter (± 116) 1.01
es/target/es2020 133455 ns/iter (± 304) 133098 ns/iter (± 280) 1.00
babelify-only 671037 ns/iter (± 1535) 679322 ns/iter (± 871) 0.99
parse_and_babelify_angular 49582976 ns/iter (± 1635602) 42085645 ns/iter (± 648646) 1.18
parse_and_babelify_backbone 5948836 ns/iter (± 144351) 5364680 ns/iter (± 37000) 1.11
parse_and_babelify_jquery 36693704 ns/iter (± 749833) 31270368 ns/iter (± 215999) 1.17
parse_and_babelify_jquery_mobile 62258216 ns/iter (± 289232) 54317382 ns/iter (± 638162) 1.15
parse_and_babelify_mootools 38347969 ns/iter (± 361213) 32242724 ns/iter (± 215012) 1.19
parse_and_babelify_underscore 4484115 ns/iter (± 58462) 4318975 ns/iter (± 27234) 1.04
parse_and_babelify_yui 37653016 ns/iter (± 945563) 36931757 ns/iter (± 1858779) 1.02
html/minify/document/css_spec 45601452 ns/iter (± 468308) 42053441 ns/iter (± 243266) 1.08
html/minify/document/github 18323834 ns/iter (± 68109) 17558830 ns/iter (± 34626) 1.04
html/minify/document/stackoverflow 16575737 ns/iter (± 35890) 15705726 ns/iter (± 35448) 1.06
html/minify/document_fragment/css_spec 43314479 ns/iter (± 233215) 40166327 ns/iter (± 239123) 1.08
html/minify/document_fragment/github 17253384 ns/iter (± 52771) 16882885 ns/iter (± 22761) 1.02
html/minify/document_fragment/stackoverflow 15743729 ns/iter (± 104239) 15255871 ns/iter (± 126153) 1.03
html/document/visitor/compare/clone 346497 ns/iter (± 1757) 340778 ns/iter (± 2448) 1.02
html/document/visitor/compare/visit_mut_span 372838 ns/iter (± 2216) 367113 ns/iter (± 1442) 1.02
html/document/visitor/compare/visit_mut_span_panic 383156 ns/iter (± 1424) 376631 ns/iter (± 2208) 1.02
html/document/visitor/compare/fold_span 412387 ns/iter (± 1726) 405872 ns/iter (± 1342) 1.02
html/document/visitor/compare/fold_span_panic 468560 ns/iter (± 1872) 471005 ns/iter (± 3089) 0.99
html/document_fragment/visitor/compare/clone 340007 ns/iter (± 2161) 338774 ns/iter (± 2522) 1.00
html/document_fragment/visitor/compare/visit_mut_span 372055 ns/iter (± 2116) 366266 ns/iter (± 2112) 1.02
html/document_fragment/visitor/compare/visit_mut_span_panic 378863 ns/iter (± 2181) 372863 ns/iter (± 1444) 1.02
html/document_fragment/visitor/compare/fold_span 412007 ns/iter (± 2483) 409699 ns/iter (± 3044) 1.01
html/document_fragment/visitor/compare/fold_span_panic 463616 ns/iter (± 2177) 462739 ns/iter (± 2370) 1.00
html/lexer/css_2021_spec 15546871 ns/iter (± 75200) 15644822 ns/iter (± 131026) 0.99
html/lexer/github_com_17_05_2022 6047839 ns/iter (± 3106) 6086676 ns/iter (± 5281) 0.99
html/lexer/stackoverflow_com_17_05_2022 5640584 ns/iter (± 2790) 5693947 ns/iter (± 3547) 0.99
html/parser/parser_document/css_2021_spec 27705120 ns/iter (± 79346) 25621487 ns/iter (± 163184) 1.08
html/parser/parser_document/github_com_17_05_2022 8819761 ns/iter (± 9962) 8744834 ns/iter (± 15265) 1.01
html/parser/parser_document/stackoverflow_com_17_05_2022 7746002 ns/iter (± 7273) 7685313 ns/iter (± 9817) 1.01
html/parser/parser_document_fragment/css_2021_spec 28188449 ns/iter (± 148536) 25443006 ns/iter (± 133322) 1.11
html/parser/parser_document_fragment/github_com_17_05_2022 8850264 ns/iter (± 24319) 8730547 ns/iter (± 12877) 1.01
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7774892 ns/iter (± 8910) 7680804 ns/iter (± 5670) 1.01

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

Please sign in to comment.