✨ feat: optimize bundle#182
Conversation
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Deploying clipcc-preview with
|
| Latest commit: |
c3b8619
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://7f02bf35.clipcc-preview.pages.dev |
| Branch Preview URL: | https://feat-bundle-opt.clipcc-preview.pages.dev |
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
alexcui03
left a comment
There was a problem hiding this comment.
Split dependencies changes to another pr, the remaining still needs to be discussed.
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Lazy to split pr, let's have the discussion |
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
There was a problem hiding this comment.
Pull request overview
This PR reduces initial bundle size and load time by lazy-loading heavyweight editor modules (blocks/paint/extensions), trimming polyfills, and moving clipcc-svg-renderer out of the monorepo in favor of a prebuilt external dependency.
Changes:
- Convert built-in extension loading to async
import()with webpack chunk naming. - Add lazy-loaders/HOCs for
clipcc-blockandclipcc-paint, including dynamic reducer injection for paint. - Remove in-repo
packages/svg-rendererand update build/test wiring + dependencies accordingly; add production image minimization and updated browsers/Babel targets.
Reviewed changes
Copilot reviewed 80 out of 107 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/vm/webpack.config.js | Add text-encoding alias; stop copying svg-renderer web build artifacts |
| packages/vm/src/virtual-machine.js | Remove unused core-extension boot loop; lazy-load SB1 converter on demand |
| packages/vm/src/import/load-costume.js | Whitespace-only formatting changes |
| packages/vm/src/extensions/scratch3_gdx_for/index.js | Switch @vernier/godirect import path to package root |
| packages/vm/src/extension-support/extension-manager.js | Split core vs builtin extensions; lazy-load builtin extensions via dynamic import |
| packages/vm/package.json | Update deps (godirect, sb1 converter, render fonts) and svg-renderer versioning |
| packages/svg-renderer/webpack.config.js | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/tsconfig.node.json | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/tsconfig.json | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/sanitize-svg.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixup-svg-string.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/svg-tag-prefixes.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/script.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/script.sanitized.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/scratch_cat_bitmap_within_svg.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/scratch_cat_bitmap_within_svg.sanitized.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/reserved-namespace.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/reserved-namespace.sanitized.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/red-and-white-carousel-pound-in-href.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/red-and-white-carousel-pound-in-href.sanitized.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/onload-script.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/metadata-onload.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/metadata-onload.sanitized.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/metadata-body.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/hearts.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/embedded-cat-xlink.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/embedded-cat-foo.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/embedded-cat-foo.sanitized.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/css-import.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/fixtures/css-import.sanitized.svg | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/test/bitmapAdapter_getResized.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/util/log.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/types/transformation-matrix.d.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/types/scratch-render-fonts.d.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/types/global.d.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/transform-applier.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/svg-renderer.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/svg-element.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/serialize-svg-to-string.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/sanitize-svg.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/playground/index.html | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/load-svg-string.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/index.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/font-inliner.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/font-converter.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/fixup-svg-string.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/src/bitmap-adapter.ts | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/renovate.json5 | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/package.json | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/eslint.config.js | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/TRADEMARK | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/README.md | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/LICENSE | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.npmignore | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.gitignore | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.github/workflows/commitlint.yml | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.github/workflows/ci-cd.yml | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.github/PULL_REQUEST_TEMPLATE.md | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.github/ISSUE_TEMPLATE.md | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.github/CONTRIBUTING.md | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.gitattributes | Removed (svg-renderer moved out of monorepo) |
| packages/svg-renderer/.editorconfig | Removed (svg-renderer moved out of monorepo) |
| packages/storage/webpack.config.js | Adjust externals mapping for text encoding polyfill package |
| packages/storage/package.json | Remove unused Babel runtime transform plugin devDependency |
| packages/render/test/integration/index.html | Update svg-renderer script path to come from node_modules |
| packages/render/test/integration/cpu-render.html | Update svg-renderer script path to come from node_modules |
| packages/render/src/SVGSkin.js | Post-process serialized SVG text before creating data URI |
| packages/render/package.json | Swap render-fonts dep; pin svg-renderer to external version |
| packages/paint/webpack.config.js | Remove now-unneeded Babel plugin configuration |
| packages/paint/src/playground/playground.jsx | Switch to clipcc-render-fonts import |
| packages/paint/package.json | Swap render-fonts dep; remove Babel proposal plugin devDependency |
| packages/paint/.babelrc | Remove object-rest-spread plugin from Babel config |
| packages/l10n/webpack.config.js | Simplify Babel loader options |
| packages/l10n/package.json | Adjust Babel devDependency versions |
| packages/l10n/.babelrc | Update preset-env targets to modern browsers |
| packages/gui/webpack.config.js | Add image minimization, analyzer option, updated splitChunks strategy, remove some includes/plugins |
| packages/gui/tsconfig.json | Switch TS module/JSX settings for ESM + React emit |
| packages/gui/src/types.d.ts | Add module declarations for asset imports used by TS |
| packages/gui/src/reducers/utils.ts | Add dynamic reducer injection utilities |
| packages/gui/src/playground/index.jsx | Remove legacy polyfills and service worker registration |
| packages/gui/src/lib/paint-loader.ts | Lazy loader for clipcc-paint |
| packages/gui/src/lib/paint-loader-hoc.tsx | HOC to inject paint module + reducer when loaded |
| packages/gui/src/lib/make-toolbox.js | Defer ScratchBlocks localization usage until blocks are loaded |
| packages/gui/src/lib/blocks.js | Pass ScratchBlocks instance in; remove compareStrings override |
| packages/gui/src/lib/blocks-loader.ts | Lazy loader for clipcc-block |
| packages/gui/src/lib/blocks-loader-hoc.tsx | HOC to inject blocks module when loaded |
| packages/gui/src/lib/backpack/sound-thumbnail.jpg | Replace/optimize backpack asset |
| packages/gui/src/lib/backpack/block-to-image.js | Make async and load ScratchBlocks lazily |
| packages/gui/src/lib/app-state-hoc.jsx | Remove eager paint reducer; enable dynamic reducer injection wiring |
| packages/gui/src/index.js | Remove eager paint reducer from exported reducer set |
| packages/gui/src/containers/paint-editor-wrapper.jsx | Load paint editor lazily via HOC |
| packages/gui/src/containers/gui.jsx | Preload paint editor when entering full editor (non-player) |
| packages/gui/src/containers/custom-procedures.jsx | Lazy-load ScratchBlocks for mutator workspace setup |
| packages/gui/src/containers/blocks.jsx | Lazy-load ScratchBlocks for blocks workspace; add error logging in toolbox generation |
| packages/gui/src/components/loader/scoped-loader.tsx | Add scoped loader UI for lazy-loading states |
| packages/gui/src/components/loader/loader.css | Add styling for scoped loader variant |
| packages/gui/package.json | Add bundle analyze script; update deps (remove legacy polyfills, add imagemin tooling) |
| packages/gui/.browserslistrc | Update browser support policy to modern targets |
| packages/gui/.babelrc | Remove now-unneeded Babel plugins; simplify preset-env config |
| packages/block/src/utils.ts | Optimize string comparison by reusing a single Intl.Collator |
| package.json | Remove svg-renderer from full build and workspace shortcuts |
| UPSTREAM | Remove scratch-svg-renderer upstream pin |
| .github/workflows/lint.yml | Remove svg-renderer lint job |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| const svgTag = loadSvgString(svgData); | ||
| const svgText = serializeSvgToString(svgTag, true /* shouldInjectFonts */); | ||
| let svgText = serializeSvgToString(svgTag, true /* shouldInjectFonts */); | ||
| svgText = svgText.replace(/"/g, "'"); | ||
| this._svgImageLoaded = false; |
| src={topBlock} | ||
| /> | ||
| <img | ||
| className={styles.middleBlock} | ||
| src={middleBlock} | ||
| /> | ||
| <img | ||
| className={styles.bottomBlock} | ||
| src={bottomBlock} |
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Description
Reduce bundle size and make load time shorter.
Proposed Changes
Test Coverage
None
Additional Context