Преглед изворни кода

perf: optimize away isBuiltInType

Evan You пре 2 година
родитељ
комит
66c0ed0a3c

+ 1 - 1
packages/compiler-core/src/index.ts

@@ -71,4 +71,4 @@ export {
   CompilerDeprecationTypes
 } from './compat/compatConfig'
 
-export { baseParse as newParse } from './parser/index'
+// export { baseParse as newParse } from './parser/index'

+ 3 - 8
packages/compiler-core/src/transforms/vIf.ts

@@ -30,13 +30,7 @@ import { createCompilerError, ErrorCodes } from '../errors'
 import { processExpression } from './transformExpression'
 import { validateBrowserExpression } from '../validateExpression'
 import { FRAGMENT, CREATE_COMMENT } from '../runtimeHelpers'
-import {
-  injectProp,
-  findDir,
-  findProp,
-  isBuiltInType,
-  getMemoedVNodeCall
-} from '../utils'
+import { injectProp, findDir, findProp, getMemoedVNodeCall } from '../utils'
 import { PatchFlags, PatchFlagNames } from '@vue/shared'
 
 export const transformIf = createStructuralDirectiveTransform(
@@ -165,7 +159,8 @@ export function processIf(
           !(
             context.parent &&
             context.parent.type === NodeTypes.ELEMENT &&
-            isBuiltInType(context.parent.tag, 'transition')
+            (context.parent.tag === 'transition' ||
+              context.parent.tag === 'Transition')
           )
         ) {
           branch.children = [...comments, ...branch.children]

+ 1 - 4
packages/compiler-core/src/utils.ts

@@ -37,7 +37,7 @@ import {
   GUARD_REACTIVE_PROPS,
   WITH_MEMO
 } from './runtimeHelpers'
-import { isString, isObject, hyphenate, extend, NOOP } from '@vue/shared'
+import { isString, isObject, extend, NOOP } from '@vue/shared'
 import { PropsExpression } from './transforms/transformElement'
 import { parseExpression } from '@babel/parser'
 import { Expression } from '@babel/types'
@@ -45,9 +45,6 @@ import { Expression } from '@babel/types'
 export const isStaticExp = (p: JSChildNode): p is SimpleExpressionNode =>
   p.type === NodeTypes.SIMPLE_EXPRESSION && p.isStatic
 
-export const isBuiltInType = (tag: string, expected: string): boolean =>
-  tag === expected || tag === hyphenate(expected)
-
 export function isCoreComponent(tag: string): symbol | void {
   switch (tag) {
     case 'Teleport':

+ 3 - 4
packages/compiler-dom/src/parserOptions.ts

@@ -2,8 +2,7 @@ import {
   TextModes,
   ParserOptions,
   ElementNode,
-  NodeTypes,
-  isBuiltInType
+  NodeTypes
 } from '@vue/compiler-core'
 import { isVoidTag, isHTMLTag, isSVGTag } from '@vue/shared'
 import { TRANSITION, TRANSITION_GROUP } from './runtimeHelpers'
@@ -23,9 +22,9 @@ export const parserOptions: ParserOptions = {
   decodeEntities: __BROWSER__ ? decodeHtmlBrowser : decodeHtml,
 
   isBuiltInComponent: (tag: string): symbol | undefined => {
-    if (isBuiltInType(tag, `Transition`)) {
+    if (tag === 'Transition' || tag === 'transition') {
       return TRANSITION
-    } else if (isBuiltInType(tag, `TransitionGroup`)) {
+    } else if (tag === 'TransitionGroup' || tag === 'transition-group') {
       return TRANSITION_GROUP
     }
   },

+ 2 - 3
packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts

@@ -6,8 +6,7 @@ import {
   createSimpleExpression,
   RootNode,
   TemplateChildNode,
-  findDir,
-  isBuiltInType
+  findDir
 } from '@vue/compiler-dom'
 
 export const ssrInjectCssVars: NodeTransform = (node, context) => {
@@ -43,7 +42,7 @@ function injectCssVars(node: RootNode | TemplateChildNode) {
       node.tagType === ElementTypes.COMPONENT) &&
     !findDir(node, 'for')
   ) {
-    if (isBuiltInType(node.tag, 'Suspense')) {
+    if (node.tag === 'suspense' || node.tag === 'Suspense') {
       for (const child of node.children) {
         if (
           child.type === NodeTypes.ELEMENT &&

+ 5 - 4
packages/compiler-ssr/src/transforms/ssrInjectFallthroughAttrs.ts

@@ -7,8 +7,7 @@ import {
   RootNode,
   TemplateChildNode,
   ParentNode,
-  findDir,
-  isBuiltInType
+  findDir
 } from '@vue/compiler-dom'
 
 const filterChild = (node: ParentNode) =>
@@ -28,8 +27,10 @@ export const ssrInjectFallthroughAttrs: NodeTransform = (node, context) => {
   if (
     node.type === NodeTypes.ELEMENT &&
     node.tagType === ElementTypes.COMPONENT &&
-    (isBuiltInType(node.tag, 'Transition') ||
-      isBuiltInType(node.tag, 'KeepAlive'))
+    (node.tag === 'transition' ||
+      node.tag === 'Transition' ||
+      node.tag === 'KeepAlive' ||
+      node.tag === 'keep-alive')
   ) {
     const rootChildren = filterChild(context.root)
     if (rootChildren.length === 1 && rootChildren[0] === node) {