Skip to content

Commit 40d2bf7

Browse files
authoredMay 19, 2023
fix(es/minifier): Prevent inlining vars assigned outside current function scope (#7414)
**Related issue:** - Closes #7412.
1 parent 135c4fd commit 40d2bf7

File tree

7 files changed

+55
-18
lines changed

7 files changed

+55
-18
lines changed
 

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -182,14 +182,14 @@ where
182182
// new variant is added for multi inline, think carefully
183183
if is_inline_enabled
184184
&& usage.declared_count == 1
185-
&& (usage.can_inline_var())
185+
&& usage.can_inline_var()
186186
&& match init {
187187
Expr::Ident(Ident {
188188
sym: js_word!("eval"),
189189
..
190190
}) => false,
191191

192-
Expr::Ident(id) if !id.eq_ignore_span(ident) => self
192+
Expr::Ident(id) if !id.eq_ignore_span(ident) && usage.assigned_fn_local => self
193193
.data
194194
.vars
195195
.get(&id.to_id())
@@ -362,6 +362,10 @@ where
362362
}
363363

364364
Expr::Ident(id) if !id.eq_ignore_span(ident) => {
365+
if !usage.assigned_fn_local {
366+
return;
367+
}
368+
365369
if let Some(init_usage) = self.data.vars.get(&id.to_id()) {
366370
if init_usage.reassigned() || !init_usage.declared {
367371
return;

‎crates/swc_ecma_minifier/src/program_data.rs

+14-4
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ pub(crate) struct VarUsageInfo {
9999
/// functions.
100100
pub(crate) is_fn_local: bool,
101101

102+
used_in_non_child_fn: bool,
103+
104+
/// `true` if all its assign happens in the same function scope it's defined
105+
pub(crate) assigned_fn_local: bool,
106+
102107
pub(crate) executed_multiple_time: bool,
103108
pub(crate) used_in_cond: bool,
104109

@@ -123,8 +128,6 @@ pub(crate) struct VarUsageInfo {
123128
/// `infects_to`. This should be renamed, but it will be done with another
124129
/// PR. (because it's hard to review)
125130
infects_to: Vec<Access>,
126-
127-
pub(crate) used_in_non_child_fn: bool,
128131
/// Only **string** properties.
129132
pub(crate) accessed_props: Box<AHashMap<JsWord, u32>>,
130133

@@ -166,6 +169,7 @@ impl Default for VarUsageInfo {
166169
accessed_props: Default::default(),
167170
used_recursively: Default::default(),
168171
is_top_level: Default::default(),
172+
assigned_fn_local: true,
169173
}
170174
}
171175
}
@@ -232,6 +236,8 @@ impl Storage for ProgramData {
232236
match self.vars.entry(id.clone()) {
233237
Entry::Occupied(mut e) => {
234238
e.get_mut().inline_prevented |= var_info.inline_prevented;
239+
let var_assigned = var_info.assign_count > 0
240+
|| (var_info.var_initialized && !e.get().var_initialized);
235241

236242
if var_info.var_initialized {
237243
if e.get().var_initialized || e.get().ref_count > 0 {
@@ -294,6 +300,8 @@ impl Storage for ProgramData {
294300
e.get_mut().is_fn_local &= var_info.is_fn_local;
295301
e.get_mut().used_in_non_child_fn |= var_info.used_in_non_child_fn;
296302

303+
e.get_mut().assigned_fn_local &= var_info.assigned_fn_local;
304+
297305
for (k, v) in *var_info.accessed_props {
298306
*e.get_mut().accessed_props.entry(k).or_default() += v;
299307
}
@@ -304,6 +312,10 @@ impl Storage for ProgramData {
304312
if !var_info.used_recursively {
305313
e.get_mut().used_in_non_child_fn = true
306314
}
315+
316+
if var_assigned {
317+
e.get_mut().assigned_fn_local = false
318+
}
307319
}
308320
ScopeKind::Block => {
309321
if var_info.used_in_non_child_fn {
@@ -608,7 +620,6 @@ impl ProgramData {
608620
let simple_assign = ctx.is_exact_reassignment && !ctx.is_op_assign;
609621

610622
VarUsageInfo {
611-
is_fn_local: true,
612623
used_above_decl: !simple_assign,
613624
..Default::default()
614625
}
@@ -684,7 +695,6 @@ impl ProgramData {
684695
let simple_assign = ctx.is_exact_reassignment && !ctx.is_op_assign;
685696

686697
VarUsageInfo {
687-
is_fn_local: true,
688698
used_above_decl: !simple_assign,
689699
..Default::default()
690700
}

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

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
'object' == typeof exports && 'undefined' != typeof module ? module.exports = factory() : 'function' == typeof define && define.amd ? define(factory) : (global1 = global1 || self).Vue = factory();
33
}(this, function() {
44
'use strict';
5-
var Vue, cid, configDef, dataDef, propsDef, hookRE, baseCompile, _isServer, _Set, timerFunc, mark, measure, initProxy, target, len, str, chr, index$1, expressionPos, expressionEndPos, target$1, svgContainer, emptyStyle, decoder, warn$2, delimiters, transforms, preTransforms, postTransforms, platformIsPreTag, platformMustUseProp, platformGetTagNamespace, maybeComponent, isStaticKey, isPlatformReservedTag, div, emptyObject = Object.freeze({});
5+
var Vue, cid, configDef, dataDef, propsDef, hookRE, baseCompile, _isServer, _Set, timerFunc, mark, measure, initProxy, target, len, str, chr, index$1, expressionPos, expressionEndPos, warn$1, target$1, svgContainer, emptyStyle, decoder, warn$2, delimiters, transforms, preTransforms, postTransforms, platformIsPreTag, platformMustUseProp, platformGetTagNamespace, maybeComponent, isStaticKey, isPlatformReservedTag, div, emptyObject = Object.freeze({});
66
function isUndef(v) {
77
return null == v;
88
}
@@ -2918,16 +2918,17 @@
29182918
modules: modules$1,
29192919
directives: {
29202920
model: function(el, dir, _warn) {
2921+
warn$1 = _warn;
29212922
var code, number, valueBinding, trueValueBinding, falseValueBinding, number1, valueBinding1, value = dir.value, modifiers = dir.modifiers, tag = el.tag, type = el.attrsMap.type;
2922-
if ('input' === tag && 'file' === type && _warn("<" + el.tag + " v-model=\"" + value + '" type="file">:\nFile inputs are read only. Use a v-on:change listener instead.', el.rawAttrsMap['v-model']), el.component) return genComponentModel(el, value, modifiers), !1;
2923+
if ('input' === tag && 'file' === type && warn$1("<" + el.tag + " v-model=\"" + value + '" type="file">:\nFile inputs are read only. Use a v-on:change listener instead.', el.rawAttrsMap['v-model']), el.component) return genComponentModel(el, value, modifiers), !1;
29232924
if ('select' === tag) addHandler(el, 'change', code = (code = 'var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return ' + (modifiers && modifiers.number ? '_n(val)' : 'val') + "});") + " " + genAssignmentCode(value, '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'), null, !0);
29242925
else if ('input' === tag && 'checkbox' === type) number = modifiers && modifiers.number, valueBinding = getBindingAttr(el, 'value') || 'null', trueValueBinding = getBindingAttr(el, 'true-value') || 'true', falseValueBinding = getBindingAttr(el, 'false-value') || 'false', addProp(el, 'checked', "Array.isArray(" + value + ")?_i(" + value + "," + valueBinding + ")>-1" + ('true' === trueValueBinding ? ":(" + value + ")" : ":_q(" + value + "," + trueValueBinding + ")")), addHandler(el, 'change', "var $$a=" + value + ",$$el=$event.target,$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");if(Array.isArray($$a)){var $$v=" + (number ? '_n(' + valueBinding + ')' : valueBinding) + ",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(" + genAssignmentCode(value, '$$a.concat([$$v])') + ")}else{$$i>-1&&(" + genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))') + ")}}else{" + genAssignmentCode(value, '$$c') + "}", null, !0);
29252926
else if ('input' === tag && 'radio' === type) number1 = modifiers && modifiers.number, valueBinding1 = getBindingAttr(el, 'value') || 'null', valueBinding1 = number1 ? "_n(" + valueBinding1 + ")" : valueBinding1, addProp(el, 'checked', "_q(" + value + "," + valueBinding1 + ")"), addHandler(el, 'change', genAssignmentCode(value, valueBinding1), null, !0);
29262927
else if ('input' === tag || 'textarea' === tag) !function(el, value, modifiers) {
29272928
var type = el.attrsMap.type, value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'], typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
29282929
if (value$1 && !typeBinding) {
29292930
var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
2930-
_warn(binding + "=\"" + value$1 + '" conflicts with v-model on the same element because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
2931+
warn$1(binding + "=\"" + value$1 + '" conflicts with v-model on the same element because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
29312932
}
29322933
var ref = modifiers || {}, lazy = ref.lazy, number = ref.number, trim = ref.trim, valueExpression = '$event.target.value';
29332934
trim && (valueExpression = "$event.target.value.trim()"), number && (valueExpression = "_n(" + valueExpression + ")");
@@ -2936,7 +2937,7 @@
29362937
}(el, value, modifiers);
29372938
else {
29382939
if (!config.isReservedTag(tag)) return genComponentModel(el, value, modifiers), !1;
2939-
_warn("<" + el.tag + " v-model=\"" + value + "\">: v-model is not supported on this element type. If you are working with contenteditable, it's recommended to wrap a library dedicated for that purpose inside a custom component.", el.rawAttrsMap['v-model']);
2940+
warn$1("<" + el.tag + " v-model=\"" + value + "\">: v-model is not supported on this element type. If you are working with contenteditable, it's recommended to wrap a library dedicated for that purpose inside a custom component.", el.rawAttrsMap['v-model']);
29402941
}
29412942
return !0;
29422943
},
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export function throttleTime(interval) {
2+
let currentValue;
3+
let timeout;
4+
5+
return (done) => (value) => {
6+
currentValue = value;
7+
if (timeout) {
8+
return;
9+
}
10+
timeout = setTimeout(() => {
11+
done(currentValue);
12+
}, interval);
13+
};
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export function throttleTime(interval) {
2+
let currentValue, timeout;
3+
return (done)=>(value)=>{
4+
currentValue = value, timeout || (timeout = setTimeout(()=>{
5+
done(currentValue);
6+
}, interval));
7+
};
8+
}

‎crates/swc_ecma_minifier/tests/fixture/issues/firebase-firestore/1/output.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -2369,14 +2369,14 @@
23692369
}).next(()=>i));
23702370
}
23712371
Dn(t, e, n) {
2372-
let s;
2373-
return this.He.getDocumentsMatchingQuery(t, e, n).next((n)=>(s = n, this.In.getAllMutationBatchesAffectingQuery(t, e))).next((e)=>this.Cn(t, e, s).next((t)=>{
2374-
for (const t1 of (s = t, e))for (const e of t1.mutations){
2372+
let s, i;
2373+
return this.He.getDocumentsMatchingQuery(t, e, n).next((n)=>(s = n, this.In.getAllMutationBatchesAffectingQuery(t, e))).next((e)=>(i = e, this.Cn(t, i, s).next((t)=>{
2374+
for (const t1 of (s = t, i))for (const e of t1.mutations){
23752375
const n = e.key;
23762376
let i = s.get(n);
23772377
null == i && (i = Kt.newInvalidDocument(n), s = s.insert(n, i)), Ye(e, i, t1.localWriteTime), i.isFoundDocument() || (s = s.remove(n));
23782378
}
2379-
})).next(()=>(s.forEach((t, n)=>{
2379+
}))).next(()=>(s.forEach((t, n)=>{
23802380
Pe(e, n) || (s = s.remove(t));
23812381
}), s));
23822382
}

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -9302,7 +9302,7 @@
93029302
},
93039303
4756: function(e, t, r) {
93049304
var n, i;
9305-
void 0 !== (n = "function" == typeof (i = function() {
9305+
void 0 !== (i = "function" == typeof (n = function() {
93069306
var e = "debug", t = "hyphenChar", n = "minWordLength", i = "object" == typeof r.g ? r.g : "object" == typeof window ? window : "object" == typeof this ? this : {};
93079307
function o(e) {
93089308
var t = {};
@@ -9432,14 +9432,14 @@
94329432
}(i, y, f[D], s, b, v, m, c);
94339433
};
94349434
};
9435-
}) ? i.apply(t, []) : i) && (e.exports = n);
9435+
}) ? n.apply(t, []) : n) && (e.exports = i);
94369436
},
94379437
3202: function(e, t, r) {
94389438
e.exports = r(4756);
94399439
},
94409440
1487: function(e, t) {
94419441
var r, n;
9442-
void 0 !== (r = "function" == typeof (n = function() {
9442+
void 0 !== (n = "function" == typeof (r = function() {
94439443
return {
94449444
patterns: [
94459445
" ",
@@ -14401,7 +14401,7 @@
1440114401
""
1440214402
]
1440314403
};
14404-
}) ? n.apply(t, []) : n) && (e.exports = r);
14404+
}) ? r.apply(t, []) : r) && (e.exports = n);
1440514405
},
1440614406
5717: function(e) {
1440714407
"function" == typeof Object.create ? e.exports = function(e, t) {

1 commit comments

Comments
 (1)

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

@github-actions[bot]

Benchmark

Benchmark suite Current: 40d2bf7 Previous: 57ad722 Ratio
es/full/bugs-1 312468 ns/iter (± 7918) 299753 ns/iter (± 17029) 1.04
es/full/minify/libraries/antd 1701519117 ns/iter (± 42460614) 1657307266 ns/iter (± 27700790) 1.03
es/full/minify/libraries/d3 331674758 ns/iter (± 17644945) 301760850 ns/iter (± 7765412) 1.10
es/full/minify/libraries/echarts 1337115281 ns/iter (± 24978769) 1281004251 ns/iter (± 11402438) 1.04
es/full/minify/libraries/jquery 101785867 ns/iter (± 3228935) 92285653 ns/iter (± 431571) 1.10
es/full/minify/libraries/lodash 113597393 ns/iter (± 3660953) 108622205 ns/iter (± 835387) 1.05
es/full/minify/libraries/moment 57017021 ns/iter (± 1312052) 53612147 ns/iter (± 508591) 1.06
es/full/minify/libraries/react 20575234 ns/iter (± 487237) 19537317 ns/iter (± 151784) 1.05
es/full/minify/libraries/terser 273515513 ns/iter (± 18875061) 254393551 ns/iter (± 4005395) 1.08
es/full/minify/libraries/three 478847190 ns/iter (± 24906070) 447057721 ns/iter (± 7587006) 1.07
es/full/minify/libraries/typescript 3175671018 ns/iter (± 37968863) 3143974178 ns/iter (± 20826051) 1.01
es/full/minify/libraries/victory 721155251 ns/iter (± 35121463) 662019611 ns/iter (± 13923487) 1.09
es/full/minify/libraries/vue 147448021 ns/iter (± 7144817) 133372498 ns/iter (± 1128532) 1.11
es/full/codegen/es3 34145 ns/iter (± 141) 33755 ns/iter (± 51) 1.01
es/full/codegen/es5 34170 ns/iter (± 79) 33734 ns/iter (± 66) 1.01
es/full/codegen/es2015 34196 ns/iter (± 60) 33725 ns/iter (± 67) 1.01
es/full/codegen/es2016 34250 ns/iter (± 38) 33724 ns/iter (± 54) 1.02
es/full/codegen/es2017 34177 ns/iter (± 62) 33690 ns/iter (± 53) 1.01
es/full/codegen/es2018 34170 ns/iter (± 54) 33747 ns/iter (± 37) 1.01
es/full/codegen/es2019 34088 ns/iter (± 43) 33728 ns/iter (± 43) 1.01
es/full/codegen/es2020 34134 ns/iter (± 39) 33720 ns/iter (± 70) 1.01
es/full/all/es3 182326995 ns/iter (± 5337277) 181666185 ns/iter (± 2616157) 1.00
es/full/all/es5 176086616 ns/iter (± 3037878) 177442331 ns/iter (± 3430741) 0.99
es/full/all/es2015 142860188 ns/iter (± 2665710) 140565525 ns/iter (± 2075592) 1.02
es/full/all/es2016 137983144 ns/iter (± 3702390) 139813113 ns/iter (± 1909714) 0.99
es/full/all/es2017 136009286 ns/iter (± 2098316) 136331413 ns/iter (± 2831991) 1.00
es/full/all/es2018 132677255 ns/iter (± 2544637) 131412901 ns/iter (± 2556345) 1.01
es/full/all/es2019 131592145 ns/iter (± 2074315) 130671010 ns/iter (± 1211399) 1.01
es/full/all/es2020 120841903 ns/iter (± 1166349) 120407563 ns/iter (± 1227119) 1.00
es/full/parser 527121 ns/iter (± 12365) 522194 ns/iter (± 7254) 1.01
es/full/base/fixer 22289 ns/iter (± 22) 22888 ns/iter (± 46) 0.97
es/full/base/resolver_and_hygiene 85259 ns/iter (± 100) 85574 ns/iter (± 956) 1.00
serialization of serde 123 ns/iter (± 0) 123 ns/iter (± 0) 1
css/minify/libraries/bootstrap 27806495 ns/iter (± 900161) 27181572 ns/iter (± 110364) 1.02
css/visitor/compare/clone 2208629 ns/iter (± 55509) 2138082 ns/iter (± 8010) 1.03
css/visitor/compare/visit_mut_span 2401006 ns/iter (± 65671) 2324009 ns/iter (± 4388) 1.03
css/visitor/compare/visit_mut_span_panic 2387488 ns/iter (± 68439) 2361457 ns/iter (± 4224) 1.01
css/visitor/compare/fold_span 3233713 ns/iter (± 91681) 3102531 ns/iter (± 9273) 1.04
css/visitor/compare/fold_span_panic 3294066 ns/iter (± 94440) 3247670 ns/iter (± 10415) 1.01
css/lexer/bootstrap_5_1_3 5170924 ns/iter (± 13598) 5164154 ns/iter (± 9087) 1.00
css/lexer/foundation_6_7_4 4354906 ns/iter (± 3140) 4397563 ns/iter (± 2084) 0.99
css/lexer/tailwind_3_1_1 826033 ns/iter (± 264) 830045 ns/iter (± 477) 1.00
css/parser/bootstrap_5_1_3 21704401 ns/iter (± 409361) 21134634 ns/iter (± 37924) 1.03
css/parser/foundation_6_7_4 17216907 ns/iter (± 359521) 16836810 ns/iter (± 41570) 1.02
css/parser/tailwind_3_1_1 3246791 ns/iter (± 5155) 3245427 ns/iter (± 4349) 1.00
es/codegen/colors 731476 ns/iter (± 396063) 735245 ns/iter (± 393774) 0.99
es/codegen/large 3129187 ns/iter (± 1685084) 3211920 ns/iter (± 1670635) 0.97
es/codegen/with-parser/colors 48443 ns/iter (± 245) 48281 ns/iter (± 356) 1.00
es/codegen/with-parser/large 510679 ns/iter (± 1079) 513489 ns/iter (± 2315) 0.99
es/minify/libraries/antd 1494323458 ns/iter (± 45439344) 1450095436 ns/iter (± 24990252) 1.03
es/minify/libraries/d3 288459935 ns/iter (± 18951387) 266325368 ns/iter (± 3517600) 1.08
es/minify/libraries/echarts 1138055140 ns/iter (± 40224766) 1111237083 ns/iter (± 14741898) 1.02
es/minify/libraries/jquery 87188991 ns/iter (± 2561883) 81844524 ns/iter (± 657005) 1.07
es/minify/libraries/lodash 103478120 ns/iter (± 3792028) 97271360 ns/iter (± 1278801) 1.06
es/minify/libraries/moment 48393976 ns/iter (± 1779211) 47587431 ns/iter (± 437962) 1.02
es/minify/libraries/react 17943353 ns/iter (± 524288) 17518262 ns/iter (± 195199) 1.02
es/minify/libraries/terser 241590982 ns/iter (± 14912997) 215027451 ns/iter (± 2713381) 1.12
es/minify/libraries/three 422330280 ns/iter (± 23181414) 375406628 ns/iter (± 6415663) 1.12
es/minify/libraries/typescript 2507001061 ns/iter (± 13581153) 2673858599 ns/iter (± 15961225) 0.94
es/minify/libraries/victory 537495068 ns/iter (± 10948185) 577222728 ns/iter (± 5531295) 0.93
es/minify/libraries/vue 119345225 ns/iter (± 805801) 120127673 ns/iter (± 1550279) 0.99
es/visitor/compare/clone 2321294 ns/iter (± 81442) 2319636 ns/iter (± 81599) 1.00
es/visitor/compare/visit_mut_span 2680401 ns/iter (± 6388) 2681699 ns/iter (± 6504) 1.00
es/visitor/compare/visit_mut_span_panic 2746715 ns/iter (± 7355) 2726538 ns/iter (± 3391) 1.01
es/visitor/compare/fold_span 3804914 ns/iter (± 7592) 3802711 ns/iter (± 5506) 1.00
es/visitor/compare/fold_span_panic 3921187 ns/iter (± 5153) 3938349 ns/iter (± 6052) 1.00
es/lexer/colors 13081 ns/iter (± 8) 13106 ns/iter (± 48) 1.00
es/lexer/angular 6397008 ns/iter (± 1943) 6426917 ns/iter (± 3868) 1.00
es/lexer/backbone 791671 ns/iter (± 616) 795139 ns/iter (± 511) 1.00
es/lexer/jquery 4448865 ns/iter (± 4338) 4465860 ns/iter (± 3089) 1.00
es/lexer/jquery mobile 6906282 ns/iter (± 3663) 6930197 ns/iter (± 3993) 1.00
es/lexer/mootools 3478852 ns/iter (± 4205) 3493522 ns/iter (± 2040) 1.00
es/lexer/underscore 654321 ns/iter (± 147) 656710 ns/iter (± 2468) 1.00
es/lexer/three 20976855 ns/iter (± 7888) 20973600 ns/iter (± 27366) 1.00
es/lexer/yui 3867696 ns/iter (± 4999) 3891916 ns/iter (± 2843) 0.99
es/parser/colors 29019 ns/iter (± 115) 28909 ns/iter (± 57) 1.00
es/parser/angular 14941498 ns/iter (± 111971) 15054988 ns/iter (± 117824) 0.99
es/parser/backbone 2161024 ns/iter (± 17049) 2192740 ns/iter (± 10872) 0.99
es/parser/jquery 11759426 ns/iter (± 68503) 11932271 ns/iter (± 104643) 0.99
es/parser/jquery mobile 18248433 ns/iter (± 134581) 18656071 ns/iter (± 148782) 0.98
es/parser/mootools 8948873 ns/iter (± 37818) 9031702 ns/iter (± 25454) 0.99
es/parser/underscore 1834720 ns/iter (± 12966) 1849603 ns/iter (± 12693) 0.99
es/parser/three 51940694 ns/iter (± 266897) 54499810 ns/iter (± 695657) 0.95
es/parser/yui 9038132 ns/iter (± 54326) 9138587 ns/iter (± 63527) 0.99
es/preset-env/usage/builtin_type 140394 ns/iter (± 33898) 141422 ns/iter (± 34559) 0.99
es/preset-env/usage/property 20184 ns/iter (± 66) 20212 ns/iter (± 79) 1.00
es/resolver/typescript 110925829 ns/iter (± 2410977) 119119278 ns/iter (± 1999947) 0.93
es/fixer/typescript 80445663 ns/iter (± 523080) 86693850 ns/iter (± 1505507) 0.93
es/hygiene/typescript 166873544 ns/iter (± 1282699) 183143578 ns/iter (± 882122) 0.91
es/resolver_with_hygiene/typescript 305238467 ns/iter (± 2320948) 324654433 ns/iter (± 2549962) 0.94
es/visitor/base-perf/module_clone 80583 ns/iter (± 312) 81088 ns/iter (± 450) 0.99
es/visitor/base-perf/fold_empty 90173 ns/iter (± 235) 90717 ns/iter (± 222) 0.99
es/visitor/base-perf/fold_noop_impl_all 89320 ns/iter (± 350) 91014 ns/iter (± 384) 0.98
es/visitor/base-perf/fold_noop_impl_vec 89570 ns/iter (± 369) 91722 ns/iter (± 340) 0.98
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 42 ns/iter (± 0) 41 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 104 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3386 ns/iter (± 23) 3519 ns/iter (± 51) 0.96
es/base/parallel/resolver/typescript 5757257636 ns/iter (± 382224951) 6483359725 ns/iter (± 522424009) 0.89
es/base/parallel/hygiene/typescript 1967040321 ns/iter (± 28756349) 2159192998 ns/iter (± 40055475) 0.91
misc/visitors/time-complexity/time 5 104 ns/iter (± 1) 105 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 351 ns/iter (± 1) 341 ns/iter (± 0) 1.03
misc/visitors/time-complexity/time 15 693 ns/iter (± 4) 710 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 20 1292 ns/iter (± 12) 1324 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 40 6987 ns/iter (± 34) 6998 ns/iter (± 5) 1.00
misc/visitors/time-complexity/time 60 17544 ns/iter (± 145) 17815 ns/iter (± 13) 0.98
es/full-target/es2016 253647 ns/iter (± 2599) 254215 ns/iter (± 319) 1.00
es/full-target/es2017 240464 ns/iter (± 1106) 246526 ns/iter (± 478) 0.98
es/full-target/es2018 229889 ns/iter (± 1606) 235881 ns/iter (± 450) 0.97
es2020_nullish_coalescing 90978 ns/iter (± 718) 92889 ns/iter (± 276) 0.98
es2020_optional_chaining 122600 ns/iter (± 943) 124249 ns/iter (± 166) 0.99
es2022_class_properties 147017 ns/iter (± 1049) 148759 ns/iter (± 255) 0.99
es2018_object_rest_spread 94249 ns/iter (± 774) 95827 ns/iter (± 203) 0.98
es2019_optional_catch_binding 84006 ns/iter (± 462) 85204 ns/iter (± 109) 0.99
es2017_async_to_generator 84450 ns/iter (± 587) 85767 ns/iter (± 261) 0.98
es2016_exponentiation 88437 ns/iter (± 741) 90310 ns/iter (± 212) 0.98
es2015_arrow 91822 ns/iter (± 689) 93479 ns/iter (± 238) 0.98
es2015_block_scoped_fn 89390 ns/iter (± 361) 91710 ns/iter (± 255) 0.97
es2015_block_scoping 164132 ns/iter (± 927) 169556 ns/iter (± 315) 0.97

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

Please sign in to comment.