Skip to content

Commit e8e3ec6

Browse files
committedNov 25, 2023
perf(compiler-sfc): remove magic-string trim on script
magic-string's trim method uses a regex check for aborting which turns out to be extremely expensive - it cna take up to 10% time in total SFC compilation! The usage here is purely aesthetic so simply removing it for a big perf gain is well worth it.
1 parent 2073236 commit e8e3ec6

File tree

7 files changed

+58
-30
lines changed

7 files changed

+58
-30
lines changed
 

‎packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap

+30-14
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ return { a }
1414
`;
1515
1616
exports[`SFC analyze <script> bindings > auto name inference > do not overwrite manual name (call) 1`] = `
17-
"import { defineComponent } from 'vue'
17+
"
18+
import { defineComponent } from 'vue'
1819
const __default__ = defineComponent({
1920
name: 'Baz'
2021
})
@@ -30,7 +31,8 @@ return { a, defineComponent }
3031
`;
3132
3233
exports[`SFC analyze <script> bindings > auto name inference > do not overwrite manual name (object) 1`] = `
33-
"const __default__ = {
34+
"
35+
const __default__ = {
3436
name: 'Baz'
3537
}
3638
@@ -45,7 +47,8 @@ return { a }
4547
`;
4648
4749
exports[`SFC compile <script setup> > <script> and <script setup> co-usage > export call expression as default 1`] = `
48-
"function fn() {
50+
"
51+
function fn() {
4952
return \\"hello, world\\";
5053
}
5154
const __default__ = fn();
@@ -63,7 +66,8 @@ return { fn }
6366
`;
6467
6568
exports[`SFC compile <script setup> > <script> and <script setup> co-usage > keep original semi style 1`] = `
66-
"export default {
69+
"
70+
export default {
6771
props: ['item'],
6872
emits: ['change'],
6973
setup(__props, { expose: __expose, emit: __emit }) {
@@ -535,7 +539,8 @@ return { get a() { return a }, set a(v) { a = v } }
535539
`;
536540
537541
exports[`SFC compile <script setup> > async/await detection > should ignore await inside functions 1`] = `
538-
"export default {
542+
"
543+
export default {
539544
setup(__props, { expose: __expose }) {
540545
__expose();
541546
async function foo() { await bar }
@@ -546,7 +551,8 @@ return { foo }
546551
`;
547552
548553
exports[`SFC compile <script setup> > async/await detection > should ignore await inside functions 2`] = `
549-
"export default {
554+
"
555+
export default {
550556
setup(__props, { expose: __expose }) {
551557
__expose();
552558
const foo = async () => { await bar }
@@ -557,7 +563,8 @@ return { foo }
557563
`;
558564
559565
exports[`SFC compile <script setup> > async/await detection > should ignore await inside functions 3`] = `
560-
"export default {
566+
"
567+
export default {
561568
setup(__props, { expose: __expose }) {
562569
__expose();
563570
const obj = { async method() { await bar }}
@@ -568,7 +575,8 @@ return { obj }
568575
`;
569576
570577
exports[`SFC compile <script setup> > async/await detection > should ignore await inside functions 4`] = `
571-
"export default {
578+
"
579+
export default {
572580
setup(__props, { expose: __expose }) {
573581
__expose();
574582
const cls = class Foo { async method() { await bar }}
@@ -618,7 +626,8 @@ return { a }
618626
`;
619627
620628
exports[`SFC compile <script setup> > binding analysis for destructure 1`] = `
621-
"export default {
629+
"
630+
export default {
622631
setup(__props, { expose: __expose }) {
623632
__expose();
624633
@@ -838,7 +847,9 @@ return { msg, useCssVars, ref }
838847
`;
839848
840849
exports[`SFC compile <script setup> > imports > import dedupe between <script> and <script setup> 1`] = `
841-
"import { x } from './x'
850+
"
851+
852+
import { x } from './x'
842853
843854
export default {
844855
setup(__props, { expose: __expose }) {
@@ -902,7 +913,9 @@ return { ref }
902913
`;
903914
904915
exports[`SFC compile <script setup> > imports > should support module string names syntax 1`] = `
905-
"import { \\"😏\\" as foo } from './foo'
916+
"
917+
918+
import { \\"😏\\" as foo } from './foo'
906919
907920
export default {
908921
setup(__props, { expose: __expose }) {
@@ -1189,7 +1202,8 @@ return (_ctx, _cache) => {
11891202
`;
11901203
11911204
exports[`SFC compile <script setup> > inlineTemplate mode > with defineExpose() 1`] = `
1192-
"export default {
1205+
"
1206+
export default {
11931207
setup(__props, { expose: __expose }) {
11941208
11951209
const count = ref(0)
@@ -1352,7 +1366,8 @@ return { a }
13521366
`;
13531367
13541368
exports[`SFC genDefaultAs > <script> + <script setup> 1`] = `
1355-
"const __default__ = {}
1369+
"
1370+
const __default__ = {}
13561371
13571372
const _sfc_ = /*#__PURE__*/Object.assign(__default__, {
13581373
setup(__props, { expose: __expose }) {
@@ -1367,7 +1382,8 @@ return { a }
13671382
`;
13681383
13691384
exports[`SFC genDefaultAs > <script> + <script setup> 2`] = `
1370-
"const __default__ = {}
1385+
"
1386+
const __default__ = {}
13711387
13721388
const _sfc_ = /*#__PURE__*/Object.assign(__default__, {
13731389
setup(__props, { expose: __expose }) {

‎packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineEmits.spec.ts.snap

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`defineEmits > basic usage 1`] = `
4-
"export default {
4+
"
5+
export default {
56
emits: ['foo', 'bar'],
67
setup(__props, { expose: __expose, emit: __emit }) {
78
__expose();

‎packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineExpose.spec.ts.snap

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ return { n, get x() { return x } }
1616
`;
1717
1818
exports[`defineExpose() 1`] = `
19-
"export default {
19+
"
20+
export default {
2021
setup(__props, { expose: __expose }) {
2122
2223
__expose({ foo: 123 })

‎packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineOptions.spec.ts.snap

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`defineOptions() > basic usage 1`] = `
4-
"export default /*#__PURE__*/Object.assign({ name: 'FooApp' }, {
4+
"
5+
export default /*#__PURE__*/Object.assign({ name: 'FooApp' }, {
56
setup(__props, { expose: __expose }) {
67
__expose();
78
@@ -14,7 +15,8 @@ return { }
1415
`;
1516

1617
exports[`defineOptions() > empty argument 1`] = `
17-
"export default {
18+
"
19+
export default {
1820
setup(__props, { expose: __expose }) {
1921
__expose();
2022

‎packages/compiler-sfc/__tests__/compileScript/__snapshots__/definePropsDestructure.spec.ts.snap

+10-5
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ return () => {}
177177
`;
178178

179179
exports[`sfc reactive props destructure > defineProps/defineEmits in multi-variable declaration (full removal) 1`] = `
180-
"export default {
180+
"
181+
export default {
181182
props: ['item'],
182183
emits: ['a'],
183184
setup(__props, { emit: __emit }) {
@@ -192,7 +193,8 @@ return () => {}
192193
`;
193194

194195
exports[`sfc reactive props destructure > multi-variable declaration 1`] = `
195-
"export default {
196+
"
197+
export default {
196198
props: ['item'],
197199
setup(__props) {
198200
@@ -205,7 +207,8 @@ return () => {}
205207
`;
206208

207209
exports[`sfc reactive props destructure > multi-variable declaration fix #6757 1`] = `
208-
"export default {
210+
"
211+
export default {
209212
props: ['item'],
210213
setup(__props) {
211214
@@ -218,7 +221,8 @@ return () => {}
218221
`;
219222

220223
exports[`sfc reactive props destructure > multi-variable declaration fix #7422 1`] = `
221-
"export default {
224+
"
225+
export default {
222226
props: ['item'],
223227
setup(__props) {
224228
@@ -250,7 +254,8 @@ return (_ctx, _cache) => {
250254
`;
251255

252256
exports[`sfc reactive props destructure > nested scope 1`] = `
253-
"export default {
257+
"
258+
export default {
254259
props: ['foo', 'bar'],
255260
setup(__props) {
256261

‎packages/compiler-sfc/__tests__/compileScript/__snapshots__/hoistStatic.spec.ts.snap

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`sfc hoist static > should enable when only script setup 1`] = `
4-
"const foo = 'bar'
4+
"
5+
const foo = 'bar'
56
67
export default {
78
setup(__props) {
@@ -91,7 +92,8 @@ return () => {}
9192
`;
9293
9394
exports[`sfc hoist static > should not hoist a function or class 1`] = `
94-
"export default {
95+
"
96+
export default {
9597
setup(__props) {
9698
9799
const fn = () => {}
@@ -105,7 +107,8 @@ return () => {}
105107
`;
106108
107109
exports[`sfc hoist static > should not hoist a object or array 1`] = `
108-
"export default {
110+
"
111+
export default {
109112
setup(__props) {
110113
111114
const obj = { foo: 'bar' }
@@ -118,7 +121,8 @@ return () => {}
118121
`;
119122
120123
exports[`sfc hoist static > should not hoist a variable 1`] = `
121-
"export default {
124+
"
125+
export default {
122126
setup(__props) {
123127
124128
let KEY1 = 'default value'
@@ -133,7 +137,8 @@ return () => {}
133137
`;
134138
135139
exports[`sfc hoist static > should not hoist when disabled 1`] = `
136-
"export default {
140+
"
141+
export default {
137142
setup(__props) {
138143
139144
const foo = 'bar'

‎packages/compiler-sfc/src/compileScript.ts

-2
Original file line numberDiff line numberDiff line change
@@ -986,8 +986,6 @@ export function compileScript(
986986
)
987987
}
988988

989-
ctx.s.trim()
990-
991989
return {
992990
...scriptSetup,
993991
bindings: ctx.bindingMetadata,

0 commit comments

Comments
 (0)
Please sign in to comment.