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.
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
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
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
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
Expand Up @@ -26588,7 +26588,7 @@
{
key: "shouldAnimate",
value: function() {
return Boolean(this.props.animate);
return !!this.props.animate;
}
},
{
Expand Down
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
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
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
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

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.