From 14a6f64cbe25fffcb24b282ae81d480ff5a78231 Mon Sep 17 00:00:00 2001 From: kazuya kawaguchi Date: Fri, 3 Jan 2025 15:31:28 +0900 Subject: [PATCH] perf: more optimize bundle size --- package.json | 8 ++++---- packages/core-base/src/compilation.ts | 24 ++++++++++++++++------ packages/core-base/src/format.ts | 2 +- packages/message-compiler/src/compiler.ts | 3 +++ packages/message-compiler/src/index.ts | 8 +++++--- packages/message-compiler/src/mangler.ts | 2 +- packages/message-compiler/src/optimizer.ts | 2 +- 7 files changed, 33 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 6bb013162..870447fca 100644 --- a/package.json +++ b/package.json @@ -31,13 +31,13 @@ "build:sourcemap": "pnpm build --sourcemap", "build:type": "./scripts/build.sh", "build:typed": "pnpm build core-base vue-i18n-core --withTypes", - "size": "tsx ./scripts/build.ts --size && tsx ./scripts/size.ts", - "size:report": "tsx ./scripts/report-size.ts", + "check-install": "tsx ./scripts/playwright.ts", "clean": "run-p clean:*", "clean:coverage": "rm -rf ./coverage", "clean:dist": "rm -rf ./dist ./packages/**/dist ./docs/.vitepress/dist", "clean:docs": "trash './docs/api/!(injection).md'", "clean:type": "rm -rf ./temp", + "coverage": "opener coverage/index.html", "dev": "tsx ./scripts/dev.ts", "dev:e2e": "cross-env TZ=UTC vitest -c ./vitest.e2e.config.ts", "dev:eslint": "npx @eslint/config-inspector", @@ -73,8 +73,8 @@ "preview:size-petite-vue-i18n": "pnpm --filter @intlify/size-check-petite-vue-i18n preview", "preview:size-vue-i18n": "pnpm --filter @intlify/size-check-vue-i18n preview", "release": "bumpp package.json packages/**/package.json --commit \"release: v\" --push --tag", - "check-install": "tsx ./scripts/playwright.ts", - "coverage": "opener coverage/index.html", + "size": "tsx ./scripts/build.ts --size && tsx ./scripts/size.ts", + "size:report": "tsx ./scripts/report-size.ts", "test": "run-s lint test:cover check-install test:e2e", "test:cover": "pnpm test:unit --coverage", "test:e2e": "cross-env TZ=UTC vitest run -c ./vitest.e2e.config.ts", diff --git a/packages/core-base/src/compilation.ts b/packages/core-base/src/compilation.ts index b7594c94c..42fda8348 100644 --- a/packages/core-base/src/compilation.ts +++ b/packages/core-base/src/compilation.ts @@ -1,7 +1,9 @@ import { - baseCompile as baseCompileCore, + createParser, defaultOnError, - detectHtmlTag + detectHtmlTag, + mangle, + optimize } from '@intlify/message-compiler' import { create, @@ -59,8 +61,17 @@ function baseCompile( onError(err) } - // compile with mesasge-compiler - return { ...baseCompileCore(message, options), detectError } + // parse source codes + const parser = createParser(options) + const ast = parser.parse(message) + + // optimize ASTs + options.optimize && optimize(ast) + + // minimize ASTs + options.mangle && mangle(ast) + + return { ast, detectError, code: '' } } /* #__NO_SIDE_EFFECTS__ */ @@ -94,11 +105,12 @@ export function compile< return cached } - // compile with JIT mode + // compile message const { ast, detectError } = baseCompile(message, { ...context, location: __DEV__, - jit: true + mangle: !__DEV__, + optimize: !__DEV__ }) // compose message function from AST diff --git a/packages/core-base/src/format.ts b/packages/core-base/src/format.ts index 0c2804620..fba8eed02 100644 --- a/packages/core-base/src/format.ts +++ b/packages/core-base/src/format.ts @@ -177,7 +177,7 @@ function resolveValue( node as Node, PROPS_VALUE ) as MessageType - if (resolved) { + if (resolved != null) { return resolved } else { throw createUnhandleNodeError(type) diff --git a/packages/message-compiler/src/compiler.ts b/packages/message-compiler/src/compiler.ts index 225953dd1..93e7f92cc 100644 --- a/packages/message-compiler/src/compiler.ts +++ b/packages/message-compiler/src/compiler.ts @@ -24,6 +24,9 @@ export function baseCompile( const parser = createParser(assignedOptions) const ast = parser.parse(source) + // TODO: + // With the introduction of Jit compilation, code generation is no longer necessary. This function may no longer be needed since tree-shaking is not possible. + if (!jit) { // transform ASTs transform(ast, assignedOptions) diff --git a/packages/message-compiler/src/index.ts b/packages/message-compiler/src/index.ts index f4fa8bf8f..930f7e936 100644 --- a/packages/message-compiler/src/index.ts +++ b/packages/message-compiler/src/index.ts @@ -1,7 +1,9 @@ +export * from './compiler' +export * from './errors' +export * from './helpers' export * from './location' +export * from './mangler' export * from './nodes' +export * from './optimizer' export * from './options' -export * from './errors' -export * from './helpers' export * from './parser' -export * from './compiler' diff --git a/packages/message-compiler/src/mangler.ts b/packages/message-compiler/src/mangler.ts index d43531c0d..d8ab6189a 100644 --- a/packages/message-compiler/src/mangler.ts +++ b/packages/message-compiler/src/mangler.ts @@ -15,7 +15,7 @@ import type { TextNode } from './nodes' -export const ERROR_DOMAIN = 'minifier' +const ERROR_DOMAIN = 'minifier' /* eslint-disable @typescript-eslint/no-explicit-any */ diff --git a/packages/message-compiler/src/optimizer.ts b/packages/message-compiler/src/optimizer.ts index c99ca5674..956cc7a1a 100644 --- a/packages/message-compiler/src/optimizer.ts +++ b/packages/message-compiler/src/optimizer.ts @@ -1,5 +1,5 @@ -import { NodeTypes } from './nodes' import { join } from '@intlify/shared' +import { NodeTypes } from './nodes' import type { MessageNode, ResourceNode } from './nodes'