Skip to content

Commit

Permalink
perf(compiler-sfc): ignore empty blocks (#3520)
Browse files Browse the repository at this point in the history
  • Loading branch information
cexbrayat authored Jul 19, 2021
1 parent 65f82ce commit b771fdb
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
5 changes: 5 additions & 0 deletions packages/compiler-sfc/__tests__/parse.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,13 @@ h1 { color: red }

test('should ignore other nodes with no content', () => {
expect(parse(`<script/>`).descriptor.script).toBe(null)
expect(parse(`<script> \n\t </script>`).descriptor.script).toBe(null)
expect(parse(`<style/>`).descriptor.styles.length).toBe(0)
expect(parse(`<style> \n\t </style>`).descriptor.styles.length).toBe(0)
expect(parse(`<custom/>`).descriptor.customBlocks.length).toBe(0)
expect(
parse(`<custom> \n\t </custom>`).descriptor.customBlocks.length
).toBe(0)
})

test('handle empty nodes with src attribute', () => {
Expand Down
15 changes: 14 additions & 1 deletion packages/compiler-sfc/src/parse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,8 @@ export function parse(
if (node.type !== NodeTypes.ELEMENT) {
return
}
if (!node.children.length && !hasSrc(node) && node.tag !== 'template') {
// we only want to keep the nodes that are not empty (when the tag is not a template)
if (node.tag !== 'template' && isEmpty(node) && !hasSrc(node)) {
return
}
switch (node.tag) {
Expand Down Expand Up @@ -415,3 +416,15 @@ function hasSrc(node: ElementNode) {
return p.name === 'src'
})
}

/**
* Returns true if the node has no children
* once the empty text nodes (trimmed content) have been filtered out.
*/
function isEmpty(node: ElementNode) {
return (
node.children.filter(
child => child.type !== NodeTypes.TEXT || child.content.trim() !== ''
).length === 0
)
}

0 comments on commit b771fdb

Please sign in to comment.