Skip to content

Commit 0cd2b61

Browse files
authoredMay 25, 2023
feat(es/minifier): Inline for loop variables (#7445)
1 parent c856808 commit 0cd2b61

File tree

16 files changed

+85
-127
lines changed

16 files changed

+85
-127
lines changed
 

‎crates/swc/tests/tsc-references/objectRestForOf.2.minified.js

+3-6
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,9 @@ for (let _ref of array){
99
"x"
1010
]);
1111
}
12-
for (var _ref of array){
13-
var _ref1;
14-
_object_without_properties(_ref1 = _ref, [
15-
"x"
16-
]), { x: xx } = _ref1;
17-
}
12+
for (var _ref of array)_object_without_properties(_ref, [
13+
"x"
14+
]), { x: xx } = _ref;
1815
for (let norest of array.map((a)=>_object_spread_props(_object_spread({}, a), {
1916
x: 'a string'
2017
})))norest.x, norest.y;
Original file line numberDiff line numberDiff line change
@@ -1,73 +1 @@
1-
use swc_ecma_ast::*;
21

3-
use super::Optimizer;
4-
use crate::mode::Mode;
5-
6-
/// Methods related to the option `collapse_vars`.
7-
impl<M> Optimizer<'_, M>
8-
where
9-
M: Mode,
10-
{
11-
pub(super) fn collapse_assignment_to_vars(&mut self, e: &mut Expr) {
12-
if !self.options.collapse_vars {
13-
return;
14-
}
15-
if self.ctx.in_asm {
16-
return;
17-
}
18-
19-
if self.ctx.in_try_block || self.ctx.executed_multiple_time || self.ctx.in_cond {
20-
return;
21-
}
22-
23-
if let Expr::Assign(assign @ AssignExpr { op: op!("="), .. }) = &*e {
24-
//
25-
let left = match &assign.left {
26-
PatOrExpr::Expr(_) => return,
27-
PatOrExpr::Pat(left) => match &**left {
28-
Pat::Ident(i) => i,
29-
_ => return,
30-
},
31-
};
32-
33-
if let Some(usage) = self.data.vars.get(&left.to_id()) {
34-
if !usage.declared
35-
|| !usage.is_fn_local
36-
|| usage.assign_count != 1
37-
|| usage.var_kind == Some(VarDeclKind::Const)
38-
|| usage.mutated
39-
{
40-
return;
41-
}
42-
43-
if usage.executed_multiple_time || usage.used_in_cond {
44-
match &*assign.right {
45-
Expr::Lit(..) | Expr::Ident(..) => {}
46-
_ => return,
47-
}
48-
}
49-
50-
if usage.usage_count >= 2 {
51-
match &*assign.right {
52-
Expr::Lit(..) => {}
53-
_ => return,
54-
}
55-
}
56-
}
57-
58-
let value = match &*assign.right {
59-
Expr::Lit(Lit::Str(s)) if s.value.len() > 3 => return,
60-
Expr::Lit(..) => assign.right.clone(),
61-
_ => return,
62-
};
63-
64-
report_change!(
65-
"collapse_vars: Decided to inline {}{:?}",
66-
left.id.sym,
67-
left.id.span.ctxt
68-
);
69-
70-
self.vars.lits.insert(left.to_id(), value);
71-
}
72-
}
73-
}

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

+26-14
Original file line numberDiff line numberDiff line change
@@ -189,24 +189,35 @@ where
189189
..
190190
}) => false,
191191

192-
Expr::Ident(id) if !id.eq_ignore_span(ident) && usage.assigned_fn_local => self
193-
.data
194-
.vars
195-
.get(&id.to_id())
196-
.filter(|a| {
197-
!a.reassigned() && a.declared && {
192+
Expr::Ident(id) if !id.eq_ignore_span(ident) => {
193+
if !usage.assigned_fn_local {
194+
false
195+
} else if let Some(u) = self.data.vars.get(&id.to_id()) {
196+
let mut should_inline = !u.reassigned() && u.declared;
197+
198+
should_inline &=
198199
// Function declarations are hoisted
199200
//
200201
// As we copy expressions, this can cause a problem.
201202
// See https://github.com/swc-project/swc/issues/6463
202203
//
203204
// We check callee_count of `usage` because we copy simple functions
204-
!a.used_above_decl
205-
|| !a.declared_as_fn_decl
206-
|| usage.callee_count == 0
205+
!u.used_above_decl
206+
|| !u.declared_as_fn_decl
207+
|| usage.callee_count == 0;
208+
209+
if u.declared_as_for_init && !usage.is_fn_local {
210+
should_inline &= !matches!(
211+
u.var_kind,
212+
Some(VarDeclKind::Let | VarDeclKind::Const)
213+
)
207214
}
208-
})
209-
.is_some(),
215+
216+
should_inline
217+
} else {
218+
false
219+
}
220+
}
210221

211222
Expr::Lit(lit) => match lit {
212223
Lit::Str(s) => {
@@ -228,9 +239,10 @@ where
228239
}) => arg.is_lit(),
229240
Expr::This(..) => usage.is_fn_local,
230241
Expr::Arrow(arr) => {
231-
!(usage.used_as_arg && ref_count > 1)
232-
&& is_arrow_simple_enough_for_copy(arr)
233-
&& !usage.has_property_mutation
242+
is_arrow_simple_enough_for_copy(arr)
243+
&& !(usage.has_property_mutation
244+
|| usage.executed_multiple_time
245+
|| usage.used_as_arg && ref_count > 1)
234246
}
235247
_ => false,
236248
}

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

-2
Original file line numberDiff line numberDiff line change
@@ -1866,8 +1866,6 @@ where
18661866
}
18671867
}
18681868

1869-
self.collapse_assignment_to_vars(e);
1870-
18711869
if e.is_seq() {
18721870
debug_assert_valid(e);
18731871
}

‎crates/swc_ecma_minifier/src/program_data.rs

+7
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ pub(crate) struct VarUsageInfo {
7474
pub(crate) declared_as_fn_decl: bool,
7575
pub(crate) declared_as_fn_expr: bool,
7676

77+
pub(crate) declared_as_for_init: bool,
78+
7779
pub(crate) assign_count: u32,
7880
pub(crate) mutation_by_call_count: u32,
7981

@@ -144,6 +146,7 @@ impl Default for VarUsageInfo {
144146
declared_as_fn_param: Default::default(),
145147
declared_as_fn_decl: Default::default(),
146148
declared_as_fn_expr: Default::default(),
149+
declared_as_for_init: Default::default(),
147150
assign_count: Default::default(),
148151
mutation_by_call_count: Default::default(),
149152
usage_count: Default::default(),
@@ -436,6 +439,10 @@ impl VarDataLike for VarUsageInfo {
436439
self.declared_as_fn_expr = true;
437440
}
438441

442+
fn mark_declared_as_for_init(&mut self) {
443+
self.declared_as_for_init = true;
444+
}
445+
439446
fn mark_has_property_access(&mut self) {
440447
self.has_property_access = true;
441448
}

‎crates/swc_ecma_minifier/src/util/mod.rs

+16
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,22 @@ impl Visit for IdentUsageCollector {
355355
n.visit_children_with(self);
356356
}
357357

358+
fn visit_getter_prop(&mut self, n: &GetterProp) {
359+
if self.ignore_nested {
360+
return;
361+
}
362+
363+
n.visit_children_with(self);
364+
}
365+
366+
fn visit_setter_prop(&mut self, n: &SetterProp) {
367+
if self.ignore_nested {
368+
return;
369+
}
370+
371+
n.visit_children_with(self);
372+
}
373+
358374
fn visit_ident(&mut self, n: &Ident) {
359375
self.ids.insert(n.to_id());
360376
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -3700,8 +3700,8 @@
37003700
scope.mounted[nativeEventName] = listener, scope.listenerOpts[nativeEventName] = opt, addEventListener(scope.domTarget, nativeEventName, listener, opt);
37013701
}
37023702
function unmountDOMEventListeners(scope) {
3703-
var el, name, handler, opt, mounted = scope.mounted;
3704-
for(var nativeEventName in mounted)mounted.hasOwnProperty(nativeEventName) && (el = scope.domTarget, name = nativeEventName, handler = mounted[nativeEventName], opt = scope.listenerOpts[nativeEventName], isDomLevel2 ? el.removeEventListener(name, handler, opt) : el.detachEvent('on' + name, handler));
3703+
var el, handler, opt, mounted = scope.mounted;
3704+
for(var nativeEventName in mounted)mounted.hasOwnProperty(nativeEventName) && (el = scope.domTarget, handler = mounted[nativeEventName], opt = scope.listenerOpts[nativeEventName], isDomLevel2 ? el.removeEventListener(nativeEventName, handler, opt) : el.detachEvent('on' + nativeEventName, handler));
37053705
scope.mounted = {};
37063706
}
37073707
var DOMHandlerScope = function(domTarget, domHandlers) {

‎crates/swc_ecma_minifier/tests/fixture/next/react-pdf-renderer/output.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -18489,10 +18489,10 @@
1848918489
var r = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array;
1849018490
t.assign = function(e) {
1849118491
for(var t = Array.prototype.slice.call(arguments, 1); t.length;){
18492-
var r, n = t.shift();
18493-
if (n) {
18494-
if ("object" != typeof n) throw TypeError(n + "must be non-object");
18495-
for(var i in n)r = i, Object.prototype.hasOwnProperty.call(n, r) && (e[i] = n[i]);
18492+
var r = t.shift();
18493+
if (r) {
18494+
if ("object" != typeof r) throw TypeError(r + "must be non-object");
18495+
for(var n in r)Object.prototype.hasOwnProperty.call(r, n) && (e[n] = r[n]);
1849618496
}
1849718497
}
1849818498
return e;

‎crates/swc_ecma_minifier/tests/fixture/next/styled-components/1/output.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -4799,8 +4799,8 @@
47994799
return i;
48004800
}
48014801
return _e(e) ? "" : N(e) ? "." + e.styledComponentId : b(e) ? "function" != typeof e || e.prototype && e.prototype.isReactComponent || !n ? e : Ne(e(n), n, r, o) : e instanceof ve ? r ? (e.inject(r, o), e.getName(o)) : e : S(e) ? function e(t, n) {
4802-
var r, o, s = [];
4803-
for(var i in t)t.hasOwnProperty(i) && !_e(t[i]) && (Array.isArray(t[i]) && t[i].isCss || b(t[i]) ? s.push(be(i) + ":", t[i], ";") : S(t[i]) ? s.push.apply(s, e(t[i], i)) : s.push(be(i) + ": " + (r = i, null == (o = t[i]) || "boolean" == typeof o || "" === o ? "" : "number" != typeof o || 0 === o || r in unitless_browser_esm ? String(o).trim() : o + "px") + ";"));
4802+
var o, s = [];
4803+
for(var i in t)t.hasOwnProperty(i) && !_e(t[i]) && (Array.isArray(t[i]) && t[i].isCss || b(t[i]) ? s.push(be(i) + ":", t[i], ";") : S(t[i]) ? s.push.apply(s, e(t[i], i)) : s.push(be(i) + ": " + (null == (o = t[i]) || "boolean" == typeof o || "" === o ? "" : "number" != typeof o || 0 === o || i in unitless_browser_esm ? String(o).trim() : o + "px") + ";"));
48044804
return n ? [
48054805
n + " {"
48064806
].concat(s, [
@@ -4899,8 +4899,8 @@
48994899
this._foldedDefaultProps = o ? function Me(e) {
49004900
for(var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)n[r - 1] = arguments[r];
49014901
for(var o = 0; o < n.length; o++){
4902-
var e1, i = n[o];
4903-
if (Ve(i)) for(var a in i)"__proto__" !== (e1 = a) && "constructor" !== e1 && "prototype" !== e1 && function(e, t, n) {
4902+
var i = n[o];
4903+
if (Ve(i)) for(var a in i)"__proto__" !== a && "constructor" !== a && "prototype" !== a && function(e, t, n) {
49044904
var r = e[n];
49054905
Ve(t) && Ve(r) ? Me(r, t) : e[n] = t;
49064906
}(e, i[a], a);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export function foo(arr) {
2+
var a = () => x;
3+
4+
for (const b in arr) {
5+
console.log(a);
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export function foo(arr) {
2+
var a = ()=>x;
3+
for(const b in arr)console.log(a);
4+
}

‎crates/swc_ecma_minifier/tests/fixture/reduced/2/output.js

+1-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ export const def = {
88
const properties = allProps.filter((p)=>!(0, util_1.alwaysValidSchema)(it, schema[p]));
99
if (0 === properties.length) return;
1010
const valid = gen.name("valid");
11-
for (const prop1 of properties){
12-
var prop;
13-
(prop = prop1, it.opts.useDefaults && !it.compositeRule && void 0 !== schema[prop].default) ? applyPropertySchema(prop1) : (gen.if((0, code_1.propertyInData)(gen, data, prop1, it.opts.ownProperties)), applyPropertySchema(prop1), it.allErrors || gen.else().var(valid, !0), gen.endIf()), cxt.it.definedProperties.add(prop1), cxt.ok(valid);
14-
}
11+
for (const prop of properties)it.opts.useDefaults && !it.compositeRule && void 0 !== schema[prop].default ? applyPropertySchema(prop) : (gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties)), applyPropertySchema(prop), it.allErrors || gen.else().var(valid, !0), gen.endIf()), cxt.it.definedProperties.add(prop), cxt.ok(valid);
1512
function applyPropertySchema(prop) {
1613
cxt.subschema({
1714
keyword: "properties",

‎crates/swc_ecma_minifier/tests/full/feedback-mapbox/2c796e83-0724e2af5f19128a/output.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc_ecma_minifier/tests/projects/output/angular-1.2.5.js

+5-15
Original file line numberDiff line numberDiff line change
@@ -3190,21 +3190,11 @@
31903190
$: expression
31913191
};
31923192
case "object":
3193-
for(var key in expression)"$" == key ? function() {
3194-
if (expression[key]) {
3195-
var path = key;
3196-
predicates.push(function(value) {
3197-
return search(value, expression[path]);
3198-
});
3199-
}
3200-
}() : function() {
3201-
if (void 0 !== expression[key]) {
3202-
var path = key;
3203-
predicates.push(function(value) {
3204-
return search(getter(value, path), expression[path]);
3205-
});
3206-
}
3207-
}();
3193+
for(var key in expression)"$" == key ? expression[key] && predicates.push(function(value) {
3194+
return search(value, expression[key]);
3195+
}) : void 0 !== expression[key] && predicates.push(function(value) {
3196+
return search(getter(value, key), expression[key]);
3197+
});
32083198
break;
32093199
case "function":
32103200
predicates.push(expression);

‎crates/swc_ecma_usage_analyzer/src/analyzer/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ where
111111
let Ctx {
112112
in_left_of_for_loop,
113113
in_pat_of_param,
114+
in_pat_of_var_decl,
114115
..
115116
} = self.ctx;
116117

@@ -126,9 +127,8 @@ where
126127
v.mark_declared_as_fn_param();
127128
}
128129

129-
if in_left_of_for_loop {
130-
v.mark_reassigned();
131-
v.mark_mutated();
130+
if in_pat_of_var_decl && in_left_of_for_loop {
131+
v.mark_declared_as_for_init();
132132
}
133133
} else {
134134
self.report_usage(i, true);

‎crates/swc_ecma_usage_analyzer/src/analyzer/storage.rs

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ pub trait VarDataLike: Sized {
5151

5252
fn mark_declared_as_fn_expr(&mut self);
5353

54+
fn mark_declared_as_for_init(&mut self);
55+
5456
fn mark_has_property_access(&mut self);
5557

5658
fn mark_has_property_mutation(&mut self);

2 commit comments

Comments
 (2)

github-actions[bot] commented on May 25, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 0cd2b61 Previous: 0c92e53 Ratio
es/full/bugs-1 296793 ns/iter (± 7358) 245875 ns/iter (± 5909) 1.21
es/full/minify/libraries/antd 1520227085 ns/iter (± 18935388) 1298437643 ns/iter (± 11591121) 1.17
es/full/minify/libraries/d3 291703274 ns/iter (± 9572170) 259009190 ns/iter (± 7035426) 1.13
es/full/minify/libraries/echarts 1216491411 ns/iter (± 25254482) 1050930319 ns/iter (± 10100582) 1.16
es/full/minify/libraries/jquery 92030307 ns/iter (± 1577999) 78799222 ns/iter (± 540787) 1.17
es/full/minify/libraries/lodash 107514225 ns/iter (± 822177) 89562909 ns/iter (± 364277) 1.20
es/full/minify/libraries/moment 54167587 ns/iter (± 662026) 46168337 ns/iter (± 248140) 1.17
es/full/minify/libraries/react 19566037 ns/iter (± 191438) 16587813 ns/iter (± 85007) 1.18
es/full/minify/libraries/terser 250996300 ns/iter (± 2796537) 215747853 ns/iter (± 4065547) 1.16
es/full/minify/libraries/three 435310497 ns/iter (± 7411141) 370030884 ns/iter (± 11486569) 1.18
es/full/minify/libraries/typescript 2894053513 ns/iter (± 23982458) 2524133419 ns/iter (± 16083086) 1.15
es/full/minify/libraries/victory 623788653 ns/iter (± 2942557) 555659380 ns/iter (± 10331737) 1.12
es/full/minify/libraries/vue 130320369 ns/iter (± 740758) 112748482 ns/iter (± 905980) 1.16
es/full/codegen/es3 34299 ns/iter (± 103) 30500 ns/iter (± 40) 1.12
es/full/codegen/es5 34410 ns/iter (± 54) 30488 ns/iter (± 55) 1.13
es/full/codegen/es2015 34382 ns/iter (± 67) 30531 ns/iter (± 35) 1.13
es/full/codegen/es2016 34350 ns/iter (± 62) 30465 ns/iter (± 54) 1.13
es/full/codegen/es2017 34308 ns/iter (± 80) 30585 ns/iter (± 62) 1.12
es/full/codegen/es2018 34332 ns/iter (± 122) 30580 ns/iter (± 86) 1.12
es/full/codegen/es2019 34433 ns/iter (± 100) 30399 ns/iter (± 42) 1.13
es/full/codegen/es2020 34399 ns/iter (± 99) 30485 ns/iter (± 42) 1.13
es/full/all/es3 182827706 ns/iter (± 2409527) 156045302 ns/iter (± 1096433) 1.17
es/full/all/es5 179798384 ns/iter (± 2507034) 149288866 ns/iter (± 1555190) 1.20
es/full/all/es2015 141096576 ns/iter (± 1946491) 109560251 ns/iter (± 877892) 1.29
es/full/all/es2016 137781173 ns/iter (± 2075721) 109271814 ns/iter (± 673747) 1.26
es/full/all/es2017 137313534 ns/iter (± 1414777) 108591545 ns/iter (± 1105114) 1.26
es/full/all/es2018 138046283 ns/iter (± 1862683) 107081868 ns/iter (± 501533) 1.29
es/full/all/es2019 131880603 ns/iter (± 1853275) 106369063 ns/iter (± 915607) 1.24
es/full/all/es2020 122085460 ns/iter (± 1551146) 100829722 ns/iter (± 690238) 1.21
es/full/parser 522390 ns/iter (± 4600) 453018 ns/iter (± 4965) 1.15
es/full/base/fixer 23012 ns/iter (± 53) 17410 ns/iter (± 92) 1.32
es/full/base/resolver_and_hygiene 85705 ns/iter (± 117) 75995 ns/iter (± 286) 1.13
serialization of serde 121 ns/iter (± 0) 113 ns/iter (± 0) 1.07
css/minify/libraries/bootstrap 27104797 ns/iter (± 44297) 23529192 ns/iter (± 282995) 1.15
css/visitor/compare/clone 2095961 ns/iter (± 12276) 1662315 ns/iter (± 9914) 1.26
css/visitor/compare/visit_mut_span 2297047 ns/iter (± 6760) 1787025 ns/iter (± 8281) 1.29
css/visitor/compare/visit_mut_span_panic 2358359 ns/iter (± 7811) 1858473 ns/iter (± 27910) 1.27
css/visitor/compare/fold_span 3051457 ns/iter (± 9736) 2570892 ns/iter (± 8672) 1.19
css/visitor/compare/fold_span_panic 3194411 ns/iter (± 12798) 2761491 ns/iter (± 27203) 1.16
css/lexer/bootstrap_5_1_3 5221933 ns/iter (± 9981) 4589796 ns/iter (± 1953) 1.14
css/lexer/foundation_6_7_4 4402538 ns/iter (± 14000) 3849098 ns/iter (± 2174) 1.14
css/lexer/tailwind_3_1_1 835212 ns/iter (± 1064) 732371 ns/iter (± 611) 1.14
css/parser/bootstrap_5_1_3 21329329 ns/iter (± 31703) 18287934 ns/iter (± 99123) 1.17
css/parser/foundation_6_7_4 16894907 ns/iter (± 27460) 14695615 ns/iter (± 112848) 1.15
css/parser/tailwind_3_1_1 3265877 ns/iter (± 5575) 2803704 ns/iter (± 4081) 1.16
es/codegen/colors 730549 ns/iter (± 394807) 724187 ns/iter (± 396189) 1.01
es/codegen/large 3110162 ns/iter (± 1643915) 3001416 ns/iter (± 1590175) 1.04
es/codegen/with-parser/colors 48744 ns/iter (± 295) 43178 ns/iter (± 472) 1.13
es/codegen/with-parser/large 517680 ns/iter (± 1319) 478347 ns/iter (± 1411) 1.08
es/minify/libraries/antd 1333198719 ns/iter (± 20495095) 1124817611 ns/iter (± 15920735) 1.19
es/minify/libraries/d3 253634121 ns/iter (± 1658988) 223092014 ns/iter (± 3487600) 1.14
es/minify/libraries/echarts 1039918118 ns/iter (± 12544513) 913030954 ns/iter (± 17683745) 1.14
es/minify/libraries/jquery 80641319 ns/iter (± 352072) 69854867 ns/iter (± 309219) 1.15
es/minify/libraries/lodash 96802774 ns/iter (± 1393462) 80307922 ns/iter (± 258760) 1.21
es/minify/libraries/moment 47075238 ns/iter (± 314003) 40683315 ns/iter (± 163101) 1.16
es/minify/libraries/react 17377556 ns/iter (± 169063) 14943133 ns/iter (± 64322) 1.16
es/minify/libraries/terser 211115134 ns/iter (± 2226519) 181859204 ns/iter (± 1713600) 1.16
es/minify/libraries/three 356517942 ns/iter (± 2218265) 317134949 ns/iter (± 6397012) 1.12
es/minify/libraries/typescript 2515914477 ns/iter (± 20355856) 2209469206 ns/iter (± 16005996) 1.14
es/minify/libraries/victory 545216159 ns/iter (± 10402874) 490229245 ns/iter (± 8290437) 1.11
es/minify/libraries/vue 117967645 ns/iter (± 733178) 101687300 ns/iter (± 1127967) 1.16
es/visitor/compare/clone 2341594 ns/iter (± 11612) 2036910 ns/iter (± 12140) 1.15
es/visitor/compare/visit_mut_span 2725240 ns/iter (± 6713) 2387310 ns/iter (± 18689) 1.14
es/visitor/compare/visit_mut_span_panic 2753598 ns/iter (± 3906) 2427358 ns/iter (± 11208) 1.13
es/visitor/compare/fold_span 3825996 ns/iter (± 11878) 3455036 ns/iter (± 14847) 1.11
es/visitor/compare/fold_span_panic 3969405 ns/iter (± 16219) 3613941 ns/iter (± 23522) 1.10
es/lexer/colors 13201 ns/iter (± 25) 12187 ns/iter (± 51) 1.08
es/lexer/angular 6442687 ns/iter (± 9419) 6088133 ns/iter (± 10299) 1.06
es/lexer/backbone 798384 ns/iter (± 1030) 789951 ns/iter (± 934) 1.01
es/lexer/jquery 4485194 ns/iter (± 7527) 4482420 ns/iter (± 10529) 1.00
es/lexer/jquery mobile 6958479 ns/iter (± 11980) 6889010 ns/iter (± 5675) 1.01
es/lexer/mootools 3518025 ns/iter (± 4157) 3540869 ns/iter (± 5174) 0.99
es/lexer/underscore 664009 ns/iter (± 719) 661426 ns/iter (± 412) 1.00
es/lexer/three 21001667 ns/iter (± 39507) 21076562 ns/iter (± 99854) 1.00
es/lexer/yui 3889645 ns/iter (± 11334) 3839092 ns/iter (± 4869) 1.01
es/parser/colors 29067 ns/iter (± 241) 25455 ns/iter (± 50) 1.14
es/parser/angular 14982752 ns/iter (± 167709) 13336405 ns/iter (± 135964) 1.12
es/parser/backbone 2178042 ns/iter (± 44618) 1939566 ns/iter (± 7514) 1.12
es/parser/jquery 11685476 ns/iter (± 81491) 10668815 ns/iter (± 128145) 1.10
es/parser/jquery mobile 18061600 ns/iter (± 85126) 16718814 ns/iter (± 246228) 1.08
es/parser/mootools 8980511 ns/iter (± 107340) 8200768 ns/iter (± 30817) 1.10
es/parser/underscore 1835733 ns/iter (± 15486) 1678100 ns/iter (± 10009) 1.09
es/parser/three 50911039 ns/iter (± 296983) 47950165 ns/iter (± 336754) 1.06
es/parser/yui 9056534 ns/iter (± 61122) 8088335 ns/iter (± 55685) 1.12
es/preset-env/usage/builtin_type 137718 ns/iter (± 34685) 132050 ns/iter (± 33867) 1.04
es/preset-env/usage/property 20088 ns/iter (± 57) 15452 ns/iter (± 73) 1.30
es/resolver/typescript 109162517 ns/iter (± 1178545) 91981659 ns/iter (± 1532554) 1.19
es/fixer/typescript 77889234 ns/iter (± 718996) 68016840 ns/iter (± 1082989) 1.15
es/hygiene/typescript 162173897 ns/iter (± 640371) 136587757 ns/iter (± 1673202) 1.19
es/resolver_with_hygiene/typescript 288380064 ns/iter (± 1138485) 244444542 ns/iter (± 1985985) 1.18
es/visitor/base-perf/module_clone 80881 ns/iter (± 698) 61205 ns/iter (± 212) 1.32
es/visitor/base-perf/fold_empty 90815 ns/iter (± 289) 65053 ns/iter (± 279) 1.40
es/visitor/base-perf/fold_noop_impl_all 91229 ns/iter (± 417) 65671 ns/iter (± 144) 1.39
es/visitor/base-perf/fold_noop_impl_vec 91340 ns/iter (± 510) 65525 ns/iter (± 179) 1.39
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 52 ns/iter (± 0) 1.10
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 39 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 108 ns/iter (± 0) 0.94
es/visitor/base-perf/boxing_unboxed 80 ns/iter (± 0) 76 ns/iter (± 0) 1.05
es/visitor/base-perf/visit_contains_this 3518 ns/iter (± 47) 2500 ns/iter (± 4) 1.41
es/base/parallel/resolver/typescript 6430563640 ns/iter (± 525435570) 3925460896 ns/iter (± 320729338) 1.64
es/base/parallel/hygiene/typescript 1961639492 ns/iter (± 26742613) 1450594971 ns/iter (± 24596113) 1.35
misc/visitors/time-complexity/time 5 106 ns/iter (± 0) 108 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 10 341 ns/iter (± 6) 284 ns/iter (± 0) 1.20
misc/visitors/time-complexity/time 15 650 ns/iter (± 10) 710 ns/iter (± 3) 0.92
misc/visitors/time-complexity/time 20 1176 ns/iter (± 7) 1240 ns/iter (± 4) 0.95
misc/visitors/time-complexity/time 40 6124 ns/iter (± 113) 3703 ns/iter (± 39) 1.65
misc/visitors/time-complexity/time 60 15479 ns/iter (± 96) 7703 ns/iter (± 36) 2.01
es/full-target/es2016 252159 ns/iter (± 1655) 227159 ns/iter (± 968) 1.11
es/full-target/es2017 245806 ns/iter (± 1287) 216083 ns/iter (± 1017) 1.14
es/full-target/es2018 235106 ns/iter (± 930) 205105 ns/iter (± 613) 1.15
es2020_nullish_coalescing 92818 ns/iter (± 760) 69059 ns/iter (± 295) 1.34
es2020_optional_chaining 124306 ns/iter (± 508) 95013 ns/iter (± 353) 1.31
es2022_class_properties 148726 ns/iter (± 573) 115940 ns/iter (± 498) 1.28
es2018_object_rest_spread 97183 ns/iter (± 475) 72517 ns/iter (± 312) 1.34
es2019_optional_catch_binding 85067 ns/iter (± 421) 63328 ns/iter (± 186) 1.34
es2017_async_to_generator 86036 ns/iter (± 496) 62505 ns/iter (± 531) 1.38
es2016_exponentiation 90638 ns/iter (± 300) 66795 ns/iter (± 179) 1.36
es2015_arrow 93876 ns/iter (± 357) 68056 ns/iter (± 162) 1.38
es2015_block_scoped_fn 92392 ns/iter (± 316) 67131 ns/iter (± 169) 1.38
es2015_block_scoping 170791 ns/iter (± 546) 119723 ns/iter (± 459) 1.43

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

github-actions[bot] commented on May 25, 2023

@github-actions[bot]

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: 0cd2b61 Previous: 0c92e53 Ratio
misc/visitors/time-complexity/time 60 15479 ns/iter (± 96) 7703 ns/iter (± 36) 2.01

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

CC: @kdy1

Please sign in to comment.